आधुनिक कंप्यूटर में कई प्रोसेसिंग कोर होते हैं। यह मानते हुए कि पर्याप्त प्रसंस्करण है ताकि प्रत्येक कोर लगातार व्यस्त रह सके। उन्हें कम्प्यूटेशनल कार्य वस्तुओं की एक कतार सौंपी जाएगी। या अनुसूचक द्वारा पूरा करने के लिए धागे।
इन थ्रेड्स को निष्पादित करने के दौरान, नए थ्रेड्स या कार्य आइटम्स को स्पॉन करना संभव है। ये अलग-अलग धागे हैं जिन्हें एक साथ संसाधित किया जा सकता है। उन्हें परिणाम वापस स्पॉनिंग कार्यक्रमों में फीड करने की आवश्यकता हो सकती है या अनिश्चित काल तक पूरी तरह से अलग रहना पड़ सकता है। आमतौर पर, इन चाइल्ड थ्रेड्स को पेरेंट के समान प्रोसेसिंग कोर को सौंपा जाता है।
यह सब मानता है कि सभी कोर व्यस्त रखे गए हैं। यह तब होगा जब कोई धागा समाप्त नहीं होता है या नए धागे समान दर पर या मौजूदा धागे के अंत से तेज गति से उत्पन्न होते हैं। वास्तविक दुनिया में, हालांकि, दीर्घकालिक कार्यभार शायद ही कभी इतना सरल होता है, विशेष रूप से अंतिम-उपयोगकर्ता कंप्यूटिंग उपकरणों में। आखिरकार, एक प्रोसेसिंग कोर सभी असाइन किए गए कार्यों को पूरा कर लेगा। जब ऐसा होता है, तो बेकार बैठने और संभावित प्रदर्शन को बर्बाद करने के बजाय, यह अन्य प्रसंस्करण कोर की कार्य कतारों की जांच करता है और उनसे एक कार्य आइटम चुरा लेता है।
लाभ और नुकसान
कार्य चोरी का मतलब है कि एक निष्क्रिय प्रसंस्करण कोर सक्रिय रूप से इसे पूरा करने के लिए काम की खोज करेगा। यह समग्र प्रोसेसर के संभावित बड़े हिस्से को बेकार बैठने से रोकता है, जो मददगार है। हालाँकि, काम की चोरी कुछ लागतों के साथ आ सकती है। उदाहरण के लिए, नए प्रोसेसिंग कोर को किसी भी प्रासंगिक डेटा को अपनी कैश मेमोरी में लोड करना होगा।
इसमें समय लग सकता है, खासकर अगर इसे साझा कैश टियर द्वारा पेश किए जाने के बजाय सिस्टम रैम से अनुरोध किया जाना है। यह संभव है कि मूल प्रोसेसर उस समय सीमा में उस कार्य आइटम को फिर से शुरू करने में सक्षम हो, जिससे समग्र निष्पादन तेजी से हो। यह तब भी हो सकता है जब प्रसंस्करण कोर जिसमें से काम की वस्तु चोरी हो गई थी, ने इसे संसाधित करना शुरू नहीं किया था। कुछ कैश्ड मान पैरेंट और चाइल्ड थ्रेड के बीच समान हो सकते हैं।
कार्यान्वयन
कई प्रोग्रामिंग भाषाओं में रनटाइम होते हैं जो सीधे समर्पित प्रोसेसर पर काम को शेड्यूल कर सकते हैं। उदाहरण के लिए, सिल्क प्रोग्रामिंग लैंग्वेज, रस्ट टोकियो रनटाइम और नेट टास्क पैरेलल लाइब्रेरी ऐसा कर सकती है। वैकल्पिक रूप से, ऑपरेटिंग सिस्टम वास्तविक प्रोसेसर समय निर्धारित करने का प्रभारी हो सकता है। कार्यक्रम के साथ बस "कार्यकर्ता धागे" के पूल में कार्यों को जोड़ना, जो स्वयं ऑपरेटिंग सिस्टम द्वारा निर्धारित किए जाते हैं।
यह उन प्रणालियों में होता है जहां प्रोग्राम के पास प्रोसेसिंग कोर तक सीधी पहुंच नहीं होती है, लेकिन अन्य प्रक्रियाओं के साथ पहुंच साझा करनी चाहिए। इस परिदृश्य में अतिरिक्त सावधानी बरती जानी चाहिए ताकि यह सुनिश्चित हो सके कि एक धागा बार-बार चोरी न हो क्योंकि यह निष्क्रिय रहता है।
काम की वस्तुओं को चोरी करने के लिए कैसे चुना जाता है, इसके लिए विभिन्न दृष्टिकोण हैं। मूल अवधारणा में, दृष्टिकोण एक और यादृच्छिक कोर चुनना था। यदि इसकी कतार में एक या अधिक कार्य आइटम थे, तो अंतिम को लें। यह वरीयता पर निर्भर करता है कि क्या मूल प्रोसेसर द्वारा चाइल्ड प्रोसेस को तुरंत निष्पादित किया जाता है। या, यदि इसे प्रोसेसर की कतार में धकेल दिया जाता है और मूल प्रक्रिया को निष्पादित करना जारी रहता है, तो माता-पिता या बच्चे का धागा चोरी हो जाएगा।
इसे वर्क स्टीलिंग के रूप में सारांशित किया जा सकता है, एक लोड बैलेंसिंग तकनीक जो यह सुनिश्चित करती है कि उपलब्ध प्रोसेसर के बीच वर्ड लोड समान रूप से फैला हुआ है। इस तरह, सभी प्रोसेसर मदद के लिए कुछ न कुछ कर रहे हैं।
निष्कर्ष
वर्क चोरी एक ऐसी प्रक्रिया है जो मल्टीकोर सीपीयू में स्वचालित रूप से होती है। प्रत्येक कोर में प्रदर्शन करने के लिए कार्यों की एक कतार होती है। जब एक प्रोसेसर अपने कार्यों को पूरा करता है, तो यह दूसरे प्रसंस्करण कोर की कतार से दूसरे कार्य को चुरा लेता है। यह प्रोसेसर को कुछ कोर निष्क्रिय होने से रोकने में मदद करता है जबकि अन्य के पास अभी भी कार्यों की एक कतार है।