"हैलो, अमीगो! हमारे पास एक नया और बहुत कठिन विषय है। मुझे खेद है। इसे न केवल जावा में, बल्कि सामान्य रूप से प्रोग्रामिंग में भी सबसे जटिल विषयों में से एक माना जाता है। मैं मल्टीथ्रेडिंग के बारे में बात कर रहा हूं "

एक विशिष्ट कंप्यूटर गेम की कल्पना करें, उदाहरण के लिए, एक स्पेसशिप रेसिंग गेम। आप ब्रह्मांड के विस्तार के माध्यम से उड़ रहे हैं, उल्कापिंडों और गश्ती जहाज़ों को चकमा दे रहे हैं। इन अवैध दौड़ में आपके साथ दो दर्जन अन्य भाग ले रहे हैं।

मान लीजिए कि आप ऐसा खेल लिखने का निर्णय लेते हैं। आपके प्रोग्राम को कमांड्स (कीबोर्ड इनपुट) पर नज़र रखनी होगी, स्पेसशिप को स्थानांतरित करना होगा, उनके ट्रैजेक्टोरियों की गणना करनी होगी, किसी भी टकराव के परिणामों का निर्धारण करना होगा और यह सब उपयोगकर्ता की स्क्रीन पर बनाना होगा। यह बहुत ही जटिल कार्य है।

याद रखें कि बढ़ती शिपिंग कंपनी के उदाहरण में हमने "महान जटिलता की समस्या" को कैसे हल किया?

हमने इसे स्वतंत्र विभागों में विभाजित किया और सख्ती से निर्दिष्ट (मानकीकृत) किया कि वे कैसे बातचीत कर सकते हैं।

"लेकिन हम क्या करते हैं जब स्वतंत्र भागों को अन्य भागों के साथ समानांतर में कुछ काम करना पड़ता है? इस प्रश्न का उत्तर धागे हैं ।"

एक छोटे रोबोट के रूप में एक प्रोग्राम की कल्पना करने की कोशिश करें जो कोड के चारों ओर चलता है और कमांड निष्पादित करता है । सबसे पहले, यह एक लाइन पर एक कमांड निष्पादित करता है, फिर अगले पर जाता है, और इसी तरह।

"मैं इसे अपने दिमाग में देख सकता हूं। केक का टुकड़ा!"

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

इस प्रकार, हम न केवल कार्यक्रम को स्वतंत्र भागों/वस्तुओं में विभाजित कर सकते हैं, बल्कि इसे ऐसा भी बना सकते हैं कि ये भाग एक-दूसरे से स्वतंत्र रूप से अपना कार्य कर सकें। अलग-अलग हिस्सों के बीच जितनी कम सहभागिता होगी, कार्यक्रम उतना ही कम जटिल होगा।

कल्पना करें कि आप प्रबंधक को एक ऐसी स्क्रिप्ट से बदलने में सक्षम थे जो पत्र भेजती है । और कंपनी के अन्य विभाग यह बताने में भी सक्षम नहीं थे कि कोई परिवर्तन हुआ है। इस तरह की चीज 26वीं शताब्दी के आरंभ में उत्कृष्ट परिणामों के साथ हुई। अधिकांश प्रबंधकों और यहां तक ​​कि शीर्ष अधिकारियों को भी औसत जटिलता वाली स्क्रिप्ट द्वारा सफलतापूर्वक बदला जा सकता है। "कार्यालय प्लैंकटन यूनियन" के हस्तक्षेप के बाद ही प्रबंधकों की बड़े पैमाने पर छंटनी समाप्त हो गई। लेकिन मैं पीछे हटा।

"बहुत दिलचस्प!"

"न केवल इनमें से कई" छोटे रोबोट "निष्पादन कोड हो सकते हैं, वे एक दूसरे के साथ संवाद भी कर सकते हैं और नए रोबोट पैदा कर सकते हैं।"

"नए रोबोट पैदा करें?"

"हां, नए कार्यों को करने के लिए। कभी-कभी मौजूदा थ्रेड (रोबोट) के साथ ही कुछ क्रिया करने के लिए एक और रोबोट (दूसरा धागा) बनाना फायदेमंद होता है।"

" यह एक अच्छी बात की तरह लगता है, लेकिन मैं यह नहीं सोच सकता कि मैं इसका उपयोग कहाँ करूँगा। "

और हम उन्हें « धागे » क्यों कहते हैं?

"कल्पना करें कि प्रत्येक रोबोट एक अलग रंग है, और जब वह उन्हें निष्पादित करता है तो अपने रंग के साथ कमांड को चिह्नित करता है। छोटे रोबोट द्वारा लिया गया पथ एक पेंसिल द्वारा छोड़ी गई रेखा की तरह है। यह पथ रोबोट के पीछे एक धागे की तरह चलता है एक सुई।"

प्रत्येक "छोटे रोबोट" में एक कार्य होता है जिसे करने के लिए इसे बनाया गया था। आप सोच सकते हैं कि थ्रेड इस कार्य को निष्पादित करते समय निष्पादित कमांड का सेट है।

मान लें कि आप कार्गो डिलीवर करने के लिए अंतरिक्ष यान पर उड़ रहे हैं। तब «डिलीवरी कार्गो» आपका काम है, और आप इसे पूरा करने के बीच में हैं। और आपका उड़ान पथ आपका धागा है। हम कह सकते हैं कि प्रत्येक नया कार्य, प्रत्येक कार्य जो अभी तक पूरा नहीं हुआ है, का अपना धागा है (एक पथ जिसे अभी भी पार करने की आवश्यकता है)।

"दूसरे शब्दों में, एक कार्य और एक "छोटा रोबोट" है जो इसे निष्पादित करता है। और एक धागा रोबोट द्वारा अपना कार्य पूरा करने के लिए लिया गया रास्ता है?

"बिल्कुल।"

इसी तरह यह सब अंदर गहरे काम करता है। क्योंकि कंप्यूटर में केवल एक प्रोसेसर होता है, यह एक समय में केवल एक ही कमांड निष्पादित कर सकता है। तो यहाँ क्या होता है: प्रोसेसर लगातार थ्रेड्स के बीच स्विच करता है। यह एक नए थ्रेड पर स्विच करता है, कुछ कमांड निष्पादित करता है, फिर अगले थ्रेड पर स्विच करता है, कुछ कमांड निष्पादित करता है, और इसी तरह। लेकिन चूंकि धागे के बीच स्विचिंग प्रति सेकेंड सैकड़ों बार होती है, ऐसा लगता है कि सभी धागे एक साथ चल रहे हैं।

मल्टीथ्रेडिंग - 1