"हॅलो, अमिगो! आमच्याकडे एक नवीन आणि खूप कठीण विषय आहे. मला माफ करा. हा बर्‍याचदा जावामध्येच नव्हे तर सर्वसाधारणपणे प्रोग्रामिंगमध्ये देखील सर्वात जटिल विषयांपैकी एक मानला जातो. मी मल्टीथ्रेडिंगबद्दल बोलत आहे. "

एखाद्या सामान्य संगणक गेमची कल्पना करा, उदाहरणार्थ, स्पेसशिप रेसिंग गेम. तुम्ही कॉसमॉसच्या विस्तारातून उड्डाण करत आहात, उल्कापिंडांना आणि पेट्रोलिंग क्रूझर्सना चुकवत आहात. या अवैध शर्यतींमध्ये तुमच्यासोबत आणखी दोन डझन लोक सहभागी होत आहेत.

समजा तुम्ही असा खेळ लिहायचा निर्णय घेतला. तुमच्या प्रोग्रामला कमांड्स (कीबोर्ड इनपुट) चा मागोवा ठेवावा लागेल, स्पेसशिप हलवाव्या लागतील, त्यांच्या मार्गक्रमणांची गणना करा, कोणत्याही टक्करांचे परिणाम निश्चित करा आणि हे सर्व वापरकर्त्याच्या स्क्रीनवर काढा. हे अतिशय गुंतागुंतीचे काम आहे.

लक्षात ठेवा आम्ही वाढत्या शिपिंग कंपनीच्या उदाहरणात «महान जटिलतेची समस्या» कशी सोडवली?

आम्ही ते स्वतंत्र विभागांमध्ये विभागले आणि ते कसे संवाद साधू शकतात हे कठोरपणे (मानकीकृत) निर्दिष्ट केले.

"पण जेव्हा स्वतंत्र भागांना इतर भागांच्या समांतर काही काम करावे लागते तेव्हा आपण काय करावे?! या प्रश्नाचे उत्तर म्हणजे धागे ."

प्रोग्रामची कल्पना एक लहान रोबोट म्हणून करण्याचा प्रयत्न करा जो कोडभोवती फिरतो आणि कमांड कार्यान्वित करतो . प्रथम, ते एका ओळीवर कमांड कार्यान्वित करते, नंतर दुसर्‍यावर जाते, आणि असेच.

"मी माझ्या मनात ते पाहू शकतो. केकचा तुकडा!"

"खूप छान. आणि आता कल्पना करा की तुमच्याकडे यापैकी अनेक रोबोट्स आहेत. एक वापरकर्ता इनपुट हाताळत असताना, दुसरा त्या इनपुटवर आधारित ऑब्जेक्ट्स अपडेट करत आहे. तिसरा या ऑब्जेक्ट्स स्क्रीनवर प्रदर्शित करण्यासाठी कोड कार्यान्वित करतो. सेकंदातून अनेक वेळा, चौथ्याने कोणत्याही जहाजाची टक्कर झाली आहे की नाही हे तपासतो आणि जर ते झाले असतील तर टक्कर होण्याच्या परिणामांची गणना करते."

अशा प्रकारे, आम्ही प्रोग्रामला केवळ स्वतंत्र भाग/ऑब्जेक्टमध्ये विभागू शकत नाही, तर ते बनवू शकतो जेणेकरून हे भाग एकमेकांपासून स्वतंत्रपणे त्यांचे कार्य करू शकतील. वैयक्तिक भागांमध्ये कमी संवाद, कार्यक्रम कमी जटिल.

अशी कल्पना करा की तुम्ही मॅनेजरला अक्षरे पाठवणाऱ्या स्क्रिप्टसह बदलण्यात सक्षम आहात . आणि कंपनीचे इतर विभाग देखील बदल झाल्याचे सांगण्यास सक्षम नव्हते. या प्रकारची गोष्ट 26 व्या शतकाच्या सुरुवातीस उत्कृष्ट परिणामांसह घडली. बहुतेक व्यवस्थापक आणि अगदी उच्च अधिकारी, यशस्वीरित्या सरासरी जटिलतेच्या स्क्रिप्टद्वारे बदलले जाऊ शकतात. "ऑफिस प्लँक्टन युनियन" ने हस्तक्षेप केल्यानंतरच व्यवस्थापकांची मोठ्या प्रमाणावर टाळेबंदी संपुष्टात आली. पण मी विषयांतर करतो.

"किती मनोरंजक!"

"फक्त यापैकी अनेक "छोटे रोबोट्स" एक्झिक्युटिंग कोड असू शकत नाहीत, तर ते एकमेकांशी संवाद साधू शकतात आणि नवीन रोबोट तयार करू शकतात."

"नवीन यंत्रमानव उबवायचे?"

"होय, नवीन कार्ये करण्यासाठी. काहीवेळा वर्तमान थ्रेड (रोबो) प्रमाणेच काही क्रिया करण्यासाठी दुसरा रोबोट (दुसरा थ्रेड) तयार करणे फायदेशीर आहे."

" हे एक चांगली गोष्ट वाटते, परंतु मी ती कुठे वापरेन याचा विचार करू शकत नाही. "

आणि आपण त्यांना " थ्रेड्स " का म्हणतो ?

"कल्पना करा की प्रत्येक यंत्रमानव हा वेगळा रंग आहे, आणि आज्ञांना त्याच्या रंगाने चिन्हांकित करतो जसे की तो त्याप्रमाणे करतो. लहान रोबोटने घेतलेला मार्ग हा पेन्सिलने मागे सोडलेल्या रेषेसारखा असतो. हा मार्ग रोबोटच्या मागे एका धाग्यासारखा असतो . एक सुई."

प्रत्येक "लहान रोबोट" चे एक कार्य असते जे ते करण्यासाठी तयार केले गेले होते. तुम्ही विचार करू शकता की थ्रेड हा कार्य करत असताना अंमलात आणलेल्या कमांडचा संच आहे.

समजा तुम्ही मालवाहतूक करण्यासाठी स्पेसशिपवर उड्डाण करत आहात. मग "कार्गो वितरित करणे" हे तुमचे कार्य आहे आणि तुम्ही ते पूर्ण करण्याच्या मध्यभागी आहात. आणि तुमचा फ्लाइट मार्ग हा तुमचा धागा आहे. आम्ही असे म्हणू शकतो की प्रत्येक नवीन कार्य, प्रत्येक कार्य अद्याप पूर्ण झाले नाही, त्याचा स्वतःचा धागा आहे (अजूनही मार्ग काढणे आवश्यक आहे).

"दुसर्‍या शब्दात, एक कार्य आणि एक "छोटा रोबोट" आहे जो ते कार्यान्वित करतो. आणि एक धागा म्हणजे रोबोटने त्याचे कार्य पूर्ण करताना घेतलेला मार्ग?

"नक्की."

हे सर्व आत खोलवर कसे कार्य करते. संगणकाला एकच प्रोसेसर असल्यामुळे तो एका वेळी फक्त एक कमांड कार्यान्वित करू शकतो. तर काय होते ते येथे आहे: प्रोसेसर सतत थ्रेड्स दरम्यान स्विच करतो. ते नवीन थ्रेडवर स्विच करते, काही कमांड्स कार्यान्वित करते, नंतर पुढील थ्रेडवर स्विच करते, काही कमांड्स कार्यान्वित करते, इत्यादी. परंतु थ्रेड्समधील स्विचिंग प्रति सेकंद शेकडो वेळा होत असल्याने, आम्हाला असे दिसते की सर्व थ्रेड्स एकाच वेळी चालू आहेत.

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