"थ्रेड" (वास्तव में) क्या है?


236

मैं एक अच्छी परिभाषा खोजने की कोशिश कर रहा हूं, और एक समझ प्राप्त करता हूं, कि वास्तव में एक धागा क्या है।

ऐसा लगता है कि मुझे कुछ स्पष्ट याद आ रहा है, लेकिन हर बार जब मैंने पढ़ा कि एक धागा क्या है, तो यह लगभग एक परिपत्र परिभाषा है, एक ला "एक धागा निष्पादन का एक धागा है" या "रनिंग कार्यों में विभाजित करने का एक तरीका"। उह उह। है ना?

ऐसा लगता है कि मैंने क्या पढ़ा है कि एक धागा वास्तव में कुछ ठोस नहीं है, जैसे कि एक प्रक्रिया है। यह वास्तव में सिर्फ एक अवधारणा है। जिस तरह से मैं इस काम के तरीके को समझता हूं, एक प्रोसेसर एक प्रोग्राम के लिए कुछ कमांड निष्पादित करता है (जिसे निष्पादन का एक धागा कहा गया है ), फिर जब इसे कुछ अन्य प्रोग्राम के लिए प्रसंस्करण पर स्विच करने की आवश्यकता होती है, तो यह स्थिति को संग्रहीत करता है यह कार्यक्रम वर्तमान में कहीं (थ्रेड लोकल स्टोरेज) के लिए निष्पादित हो रहा है और फिर अन्य प्रोग्राम के निर्देशों को निष्पादित करना शुरू करता है। और आगे और पीछे। ऐसा है, जो वास्तव में चल रहे प्रोग्राम के "निष्पादन के रास्तों में से एक" के लिए एक थ्रेड वास्तव में एक अवधारणा है।

एक प्रक्रिया के विपरीत, जो वास्तव में कुछ है - यह संसाधनों का एक समूह है, आदि।

एक परिभाषा के उदाहरण के रूप में, जिसने मुझे वास्तव में बहुत मदद नहीं की। । ।

से विकिपीडिया :

"कंप्यूटर विज्ञान में एक धागा निष्पादन के एक धागे के लिए छोटा है। थ्रेड्स एक प्रोग्राम को विभाजित करने के लिए एक तरीका है (जिसे" स्प्लिट "" कहा जाता है) दो या अधिक एक साथ (या छद्म-एक साथ) चल रहे कार्यों में। थ्रेड्स और प्रक्रियाएं एक से भिन्न होती हैं। ऑपरेटिंग सिस्टम दूसरे के लिए, लेकिन सामान्य तौर पर, एक थ्रेड किसी प्रक्रिया के अंदर होता है और एक ही प्रक्रिया में अलग-अलग थ्रेड्स समान संसाधनों को साझा करते हैं जबकि एक ही मल्टीटास्किंग ऑपरेटिंग सिस्टम में विभिन्न प्रक्रियाएं नहीं होती हैं। "

तो क्या मैं सही हूं? गलत? वास्तव में एक धागा क्या है?

संपादित करें: जाहिरा तौर पर एक थ्रेड को अपना कॉल स्टैक भी दिया जाता है, ताकि कुछ हद तक ठोस चीज हो


6
"प्रक्रिया" किसी अमूर्त शब्द से कम नहीं है।
हॉब्स

क्या धागा के लिए थ्रेड लोकल स्टोरेज सिर्फ कॉल स्टैक है?
committedandroider


3
नीचे दिए गए उत्तर हैं ... सार। सरल शब्दों में (और कुछ विवरणों को दर्शाना): एक समय में, एक कंप्यूटर प्रोग्राम एक बार में केवल एक ही काम कर सकता था। तो यह ए किया, फिर उसके बाद बी, फिर सी, फिर ...। आधुनिक प्रणालियों में, यह आदर्श नहीं है; उदाहरण के लिए, आप फ़ाइल डाउनलोड करते समय वेब ब्राउज़ करना चाहते हैं। इसलिए अब कार्यक्रमों में एक या एक से अधिक 'धागे' हैं। प्रत्येक 'थ्रेड' केवल एक बार में एक काम कर सकता है , लेकिन विभिन्न धागे एक साथ चीजें कर सकते हैं । थ्रेड 1 ए, फिर बी, फिर सी कर सकता है; थ्रेड 2 एक्स कर सकता है, फिर वाई, फिर जेड बी तब तक शुरू नहीं कर सकता जब तक ए समाप्त नहीं हो जाता, लेकिन ए और एक्स एक ही बार में हो सकता है।
मोहन

@ मोहं महान है लेकिन यह कैसे एक प्रक्रिया से अलग है?
एरिक

जवाबों:


152

एक धागा प्रोसेसर रजिस्टरों (एक कोर के लिए) के लिए मूल्यों का एक स्वतंत्र सेट है। चूंकि इसमें निर्देश सूचक (उर्फ प्रोग्राम काउंटर) शामिल है, यह नियंत्रित करता है कि किस क्रम में निष्पादित होता है। इसमें स्टैक पॉइंटर भी शामिल है, जिसमें प्रत्येक थ्रेड के लिए मेमोरी के अनूठे क्षेत्र के लिए बेहतर बिंदु था या फिर वे एक-दूसरे के साथ हस्तक्षेप करेंगे।

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

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


10
+1। एक धागा रजिस्टर मानों के एक सेट से अधिक "ठोस" कुछ भी नहीं है।
ग्रेग हेविगिल

6
"मूल्यों का सेट" क्या है? वे क्या हैं? वे एक धागे को कैसे परिभाषित करते हैं ?
रिचर्ड

20
@ रीचर्ड: सीपीयू रजिस्टर की सटीक सूची वास्तुकला पर निर्भर करती है, लेकिन निर्देश सूचक और स्टैक पॉइंटर बहुत सार्वभौमिक हैं। वे एक थ्रेड इंसोफर को परिभाषित करते हैं जब यह थ्रेड (रजिस्टर मानों का सेट) प्रोसेसर कोर में लोड होता है, तो थ्रेड चल रहा होता है । प्रोसेसर थ्रेड द्वारा मांगे गए निर्देशों को ला रहा है और थ्रेड रजिस्टरों को अपडेट कर रहा है। जब एक संदर्भ स्विच की आवश्यकता होती है, तो प्रोसेसर मेमोरी में रजिस्टर मूल्यों के इस सेट को बचाता है और एक अलग थ्रेड से संबंधित सेट को लोड करता है, आमतौर पर इंटरप्ट सर्विसिंग लॉजिक के हिस्से के रूप में।
बेन वोइगट

4
धन्यवाद बेन। यह बहुत मददगार है।
रिचर्ड

2
हाय thx @BenVoigt। कुछ स्पष्टीकरण जो मेरे जैसे नोक पर ठोकर खा सकते हैं: "प्रोसेसर रजिस्टरों" का क्या मतलब है? "इंस्ट्रक्शन पॉइंटर" और "स्टैक पॉइंटर" से क्या अभिप्राय है?
BKSpurgeon

214

एक थ्रेड एक निष्पादन संदर्भ है, जो एक सीपीयू निर्देशों की एक धारा को निष्पादित करने के लिए आवश्यक सभी जानकारी है।

मान लीजिए कि आप एक किताब पढ़ रहे हैं, और आप अभी एक ब्रेक लेना चाहते हैं, लेकिन आप वापस आना चाहते हैं और ठीक उसी बिंदु से रीडिंग फिर से शुरू कर सकते हैं जहाँ आप रुके थे। इसे प्राप्त करने का एक तरीका पृष्ठ संख्या, पंक्ति संख्या और शब्द संख्या नीचे लिखकर है। तो किताब पढ़ने के लिए आपका निष्पादन संदर्भ ये 3 नंबर हैं।

यदि आपके पास एक रूममेट है, और वह उसी तकनीक का उपयोग कर रही है, तो आप पुस्तक का उपयोग कर सकते हैं, जबकि आप इसका उपयोग नहीं कर रहे हैं, और जहां उसने रोका है, वहां से पढ़ना फिर से शुरू करें। फिर आप इसे वापस ले सकते हैं, और इसे फिर से शुरू कर सकते हैं जहां आप थे।

धागे उसी तरह से काम करते हैं। एक सीपीयू आपको भ्रम दे रहा है कि यह एक ही समय में कई संगणना कर रहा है। यह ऐसा होता है कि प्रत्येक गणना पर थोड़ा समय खर्च करके। यह ऐसा कर सकता है क्योंकि इसमें प्रत्येक गणना के लिए एक निष्पादन संदर्भ है। जैसे आप अपने मित्र के साथ एक पुस्तक साझा कर सकते हैं, वैसे ही कई कार्य सीपीयू साझा कर सकते हैं।

अधिक तकनीकी स्तर पर, एक निष्पादन संदर्भ (इसलिए एक धागा) में सीपीयू के रजिस्टरों के मूल्य शामिल हैं।

अंतिम: धागे प्रक्रियाओं से भिन्न होते हैं। एक धागा निष्पादन का एक संदर्भ है, जबकि एक प्रक्रिया एक संगणना से जुड़े संसाधनों का एक गुच्छा है। एक प्रक्रिया में एक या कई धागे हो सकते हैं।

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


20
एक बेहतर सादृश्य व्यक्ति को CPU के साथ समान करेगा (दोनों कुछ करते हैं), और पता-स्थान (दोनों ही मौजूद हैं) के साथ किताब की बराबरी करते हैं। इस तरह, विभिन्न पुस्तकों में बुकमार्क विभिन्न प्रक्रियाओं में धागे की तरह होते हैं। एक से अधिक बुकमार्क वाली एक एकल पुस्तक एक बहु-थ्रेडेड प्रक्रिया का एनालॉग होगी, जो आमतौर पर "थ्रेड्स" कहने पर लोगों का मतलब होता है। यह एकल प्रोसेसर मशीन के लिए काम करता है, लेकिन जब आप मल्टी-प्रोसेसिंग की बात करते हैं तो यह कुछ हद तक टूट जाता है। कोई भी परवाह नहीं करता है कि कौन सी सीपीयू फ़ंक्शन च को निष्पादित करती है (), लेकिन इससे कोई फर्क नहीं पड़ता कि कौन व्यक्ति अध्याय 11 पढ़ता है
सोलोमन स्लो

@pwnall, मेरे जैसे दूसरों के लिए कठिन अवधारणाओं को पचाने के लिए बहुत बहुत धन्यवाद! यदि मैं गलत शब्द का उपयोग कर रहा हूं तो क्या मल्टीथ्रेडिंग मल्टीप्रोसेसिंग में शामिल है (या कई सीपीयू पर समानांतर में एक प्रक्रिया चला रहा है)?
एरिजमन

51

किसी सूत्र को औपचारिक रूप से परिभाषित करने के लिए, हमें सबसे पहले उन सीमाओं को समझना चाहिए जहाँ एक धागा काम करता है।

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

एक धागा एक प्रोग्राम के भीतर ऐसे निर्देशों का एक अनुक्रम है जिसे अन्य कोड से स्वतंत्र रूप से निष्पादित किया जा सकता है। आंकड़ा अवधारणा दिखाता है: यहां छवि विवरण दर्ज करें

थ्रेड्स एक ही प्रक्रिया पता स्थान के भीतर हैं , इस प्रकार, प्रक्रिया के मेमोरी विवरण में मौजूद अधिकांश जानकारी थ्रेड्स में साझा की जा सकती हैं।

कुछ जानकारी को दोहराया नहीं जा सकता है, जैसे कि स्टैक (एक अलग मेमोरी क्षेत्र प्रति थ्रेड सूचक), रजिस्टर और थ्रेड-विशिष्ट डेटा। यह जानकारी प्रोग्राम के मुख्य थ्रेड को स्वतंत्र रूप से शेड्यूल करने की अनुमति देती है और संभवतः प्रोग्राम के भीतर एक या एक से अधिक थ्रेड्स।

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

यहां, ग्राफिक रूप से, अवधारणा का प्रतिनिधित्व किया जाता है।

यहां , आप विषय के बारे में अधिक जानकारी पा सकते हैं। वह मेरा सूचना-स्रोत भी था।

मुझे केवल एडवर्ड ली और शेषिया द्वारा एंबेडेड सिस्टम से परिचय से आने वाला वाक्य जोड़ना चाहिए :

थ्रेड्स अनिवार्य कार्यक्रम हैं जो समवर्ती रूप से चलते हैं और एक मेमोरी स्पेस साझा करते हैं। वे एक दूसरे के चर का उपयोग कर सकते हैं। क्षेत्र के कई चिकित्सक "थ्रेड्स" शब्द का उपयोग अधिक संकीर्ण रूप से उन कार्यक्रमों के निर्माण के विशेष तरीकों को संदर्भित करने के लिए करते हैं जो स्मृति को साझा करते हैं, [अन्य] मोटे तौर पर किसी भी तंत्र को संदर्भित करते हैं जहां अनिवार्य कार्यक्रम समवर्ती रूप से चलते हैं और स्मृति साझा करते हैं। इस व्यापक अर्थ में, थ्रेड्स लगभग सभी माइक्रोप्रोसेसर पर रुकावट के रूप में मौजूद हैं, यहां तक ​​कि बिना किसी ऑपरेटिंग सिस्टम (नंगे लोहे) के।


45

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

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

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

मुझे लगता है कि समझने के लिए महत्वपूर्ण बातें हैं:

  • दोनों प्रक्रियाएं और धागे "एक ही समय में चल सकते हैं"।
  • प्रक्रियाएं स्मृति को साझा नहीं करती हैं (डिफ़ॉल्ट रूप से), लेकिन थ्रेड्स अपनी स्मृति के सभी को उसी प्रक्रिया में अन्य थ्रेड्स के साथ साझा करते हैं।
  • एक प्रक्रिया में प्रत्येक थ्रेड का अपना स्टैक और अपना स्वयं का निर्देश सूचक होता है।

आप कहते हैं कि "प्रक्रियाएं (डिफ़ॉल्ट रूप से) कुछ भी साझा नहीं करती हैं" लेकिन आपकी समानता में, आप कहते हैं कि "प्रक्रियाएं दो अलग-अलग कंप्यूटरों का उपयोग करने वाले दो लोगों की तरह हैं, जो आवश्यक होने पर डेटा साझा करने के लिए नेटवर्क का उपयोग करते हैं" तो वे कुछ साझा करते हैं?
committedandroider

@committedandroider: अच्छी कॉल। मैंने अपना उत्तर यह कहने के लिए संपादित किया कि प्रक्रियाएँ मेमोरी (डिफ़ॉल्ट रूप से) साझा नहीं करती हैं , लेकिन थ्रेड्स सभी मेमोरी साझा करते हैं।
जॉय एडम्स

36

मैं चीजों की अपनी समझ के साथ-साथ ABRAHAM SILBERSCHATZ, PETER BAER GALVIN और GREG GAGNE द्वारा पुस्तक ऑपरेटिंग सिस्टम कॉन्सेप्ट्स के बहुत सारे पाठ का उपयोग करने जा रहा हूं।

प्रक्रिया

कोई भी अनुप्रयोग कंप्यूटर में पाठ (या कोड) के रूप में रहता है।

हम इस बात पर जोर देते हैं कि एक कार्यक्रम अपने आप में एक प्रक्रिया नहीं है। एक प्रोग्राम एक निष्क्रिय इकाई है, जैसे कि एक फाइल जिसमें डिस्क पर संग्रहीत निर्देशों की सूची होती है (अक्सर इसे निष्पादन योग्य फ़ाइल कहा जाता है)।

जब हम एक आवेदन शुरू करते हैं, तो हम निष्पादन का एक उदाहरण बनाते हैं। निष्पादन के इस उदाहरण को एक प्रक्रिया कहा जाता है। EDIT: (मेरी व्याख्या के अनुसार, एक वर्ग के अनुरूप और एक वर्ग का उदाहरण, एक वर्ग की प्रक्रिया होने का उदाहरण।)

प्रक्रियाओं का एक उदाहरण Google Chrome है। जब हम Google Chrome शुरू करते हैं, तो 3 प्रक्रियाएँ होती हैं:

ब्राउज़र प्रक्रिया यूजर इंटरफेस के साथ-साथ डिस्क और नेटवर्क I / O के प्रबंधन के लिए जिम्मेदार है। Chrome प्रारंभ होने पर एक नई ब्राउज़र प्रक्रिया बनाई जाती है। केवल एक ब्राउज़र प्रक्रिया बनाई जाती है।

रेंडरर प्रक्रियाओं में वेब पेजों को रेंडर करने के लिए तर्क होते हैं। इस प्रकार, उनके पास HTML, जावास्क्रिप्ट, चित्र, और आगे से निपटने के लिए तर्क हैं। एक सामान्य नियम के रूप में, एक नई टैब में खोली गई प्रत्येक वेबसाइट के लिए एक नई रेंडरर प्रक्रिया बनाई जाती है, और एक ही समय में कई रेंडरर प्रक्रिया सक्रिय हो सकती है।

• प्रत्येक प्रकार के प्लग-इन (जैसे फ़्लैश या क्विकटाइम) के उपयोग के लिए एक प्लग-इन प्रक्रिया बनाई जाती है। प्लग-इन प्रक्रियाओं में प्लग-इन के साथ ही अतिरिक्त कोड के लिए कोड होता है जो प्लग-इन को संबंधित रेंडरर प्रक्रियाओं और ब्राउज़र प्रक्रिया के साथ संवाद करने में सक्षम बनाता है।

धागा

इसका उत्तर देने के लिए मुझे लगता है कि आपको पहले पता होना चाहिए कि प्रोसेसर क्या है। एक प्रोसेसर हार्डवेयर का टुकड़ा है जो वास्तव में गणना करता है। EDIT: (दो संख्याओं को जोड़ना, एक सरणी को छाँटना, मूल रूप से लिखे गए कोड को निष्पादित करना)

अब एक सूत्र की परिभाषा पर चलते हैं।

एक धागा CPU उपयोग की एक बुनियादी इकाई है ; इसमें एक थ्रेड आईडी, एक प्रोग्राम काउंटर, एक रजिस्टर सेट और एक स्टैक शामिल होता है।

EDIT: इंटेल की वेबसाइट से एक सूत्र की परिभाषा:

एक थ्रेड, या निष्पादन का धागा, एक निर्देश के मूल क्रमबद्ध अनुक्रम के लिए एक सॉफ्टवेयर शब्द है जिसे एकल सीपीयू कोर द्वारा पारित या संसाधित किया जा सकता है।

इसलिए, यदि Chrome एप्लिकेशन से रेंडरर प्रक्रिया संख्याओं की एक सरणी को सॉर्ट करती है, तो छंटनी एक थ्रेड / निष्पादन के थ्रेड पर होगी। (सूत्र के बारे में व्याकरण मुझे भ्रमित करने वाला लगता है)

मेरी बातों की व्याख्या

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

संपादित करें: अन्य जानकारी जो मुझे अधिक संदर्भ देने के लिए उपयोगी लगी

सभी आधुनिक दिन के कंप्यूटर में एक से अधिक धागे होते हैं। कंप्यूटर में थ्रेड्स की संख्या कंप्यूटर में कोर की संख्या पर निर्भर करती है।

समवर्ती कम्प्यूटिंग :

विकिपीडिया से:

समवर्ती कंप्यूटिंग कंप्यूटिंग का एक रूप है जिसमें कई संगणनाओं को ओवरलैपिंग समय के दौरान निष्पादित किया जाता है - समवर्ती - बजाय क्रमिक रूप से (अगले शुरू होने से पहले पूरा करने वाला)। यह एक प्रणाली की एक संपत्ति है - यह एक व्यक्तिगत कार्यक्रम, एक कंप्यूटर या एक नेटवर्क हो सकता है - और प्रत्येक गणना ("प्रक्रिया") के लिए एक अलग निष्पादन बिंदु या "नियंत्रण का धागा" हो सकता है।

इसलिए, मैं एक कार्यक्रम लिख सकता हूं जो 4 संख्याओं के योग की गणना करता है:

(1 + 3) + (4 + 5)

इस राशि की गणना करने के लिए कार्यक्रम में (जो निष्पादन की एक थ्रेड पर चलने वाली एक प्रक्रिया होगी) मैं एक और प्रक्रिया को कांटा कर सकता हूं जो गणना करने के लिए एक अलग थ्रेड पर चल सकती है (4 + 5) और परिणाम को मूल प्रक्रिया पर लौटाएं, जबकि मूल प्रक्रिया (1 + 3) के योग की गणना करती है।


5
यह असली सौदा जवाब है
सुहैल मुमताज़ अवन

1
बहुत मदद की। यह स्पष्टीकरण कैसा दिखता है।
दिनेश कुमार

इस उत्तर का एक बड़ा मूल्य यह है कि यह एक संदर्भ पुस्तक प्रदान करता है जहां आप अधिक विवरण पा सकते हैं यदि इसकी आवश्यकता है। शुक्रिया @chatuur!
desa

7

दुर्भाग्य से, धागे मौजूद हैं। एक धागा कुछ मूर्त है। आप एक को मार सकते हैं, और अन्य अभी भी चल रहे हैं। आप नए धागे स्पॉन कर सकते हैं .... हालांकि प्रत्येक थ्रेड स्वयं की प्रक्रिया नहीं है, वे प्रक्रिया के अंदर अलग-अलग चल रहे हैं। मल्टी-कोर मशीनों पर, एक ही समय में 2 धागे चल सकते हैं।

http://en.wikipedia.org/wiki/Simultaneous_multithreading

http://www.intel.com/intelpress/samples/mcp_samplech01.pdf


1
वह क्या है जो इसे "कुछ मूर्त" बनाता है? क्या यह सिर्फ टीएलएस और उसके कॉल स्टैक में संग्रहीत डेटा है?
रिचर्ड

यह समझने के लिए सिर्फ एक अमूर्त नहीं है ... अगर यह वास्तव में सिर्फ एक धागा था जो कई धागे के रूप में आगे और पीछे की ओर भागता था, तो ओपी सही होगा, लेकिन हाँ, मैं कहूंगा कि यह डेटा इसे मूर्त बना देगा ।
ऑर्बिट

मुझे सूचित करो । । । तो उत्तर क्या है?
रिचर्ड

@ रिचर्ड शब्दार्थ के बारे में बहस में नहीं लग रहे, बस ओपी को वैचारिक रूप से स्पष्ट करने के प्रयास के लिए मेरे जवाब को दोहराया।
ऑर्बिट

@richard टीएलएस क्या है?
committedandroider

6

निष्पादन नियमों के साथ एक धागा मेमोरी के संदर्भ (या कैसे तेनबाउम बेहतर तरीके से, संसाधन समूह) से ज्यादा कुछ नहीं है। यह एक सॉफ्टवेयर निर्माण है। सीपीयू को पता नहीं है कि एक धागा क्या है (कुछ अपवाद यहां, कुछ प्रोसेसर में हार्डवेयर थ्रेड हैं), यह सिर्फ निर्देशों को निष्पादित करता है।

कर्नेल एक सार्थक तरीके से स्मृति और निर्देशों के आदेश का प्रबंधन करने के लिए थ्रेड और प्रक्रिया अवधारणा का परिचय देता है।


5

यह याहू उत्तर से लिया गया था:

एक धागा एक कोडिंग निर्माण है जो किसी एप्लिकेशन के आर्किटेक्चर द्वारा अप्रभावित होता है। एक एकल प्रक्रिया में अक्सर कई सूत्र हो सकते हैं। थ्रेड्स भी एक-दूसरे के साथ सीधे संवाद कर सकते हैं क्योंकि वे समान चर साझा करते हैं।

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

हालांकि, सरल शब्दों में कहें तो धागे अलग-अलग "कार्यों" जैसे हैं। इसलिए सोचें कि जब आप कुछ कर रहे हैं, उदाहरण के लिए आप एक पेपर पर एक सूत्र लिख रहे हैं। इसे एक धागा माना जा सकता है। फिर एक और धागा आप कागज के दूसरे टुकड़े पर कुछ और लिख रहे हैं। यही वह जगह है जहां मल्टीटास्किंग आती है।

इंटेल प्रोसेसर के लिए कहा जाता है कि "हाइपर-थ्रेडिंग" (एएमडी के पास भी है) और इसका अर्थ है कई "थ्रेड्स" या मल्टीटास्क को बेहतर प्रदर्शन करने में सक्षम होना।

मैं कैसे एक धागा संभाला है के रसद के बारे में निश्चित नहीं हूँ। मुझे याद है कि प्रोसेसर उनके बीच आगे और पीछे जा रहा है, लेकिन मुझे इस बारे में 100% यकीन नहीं है और उम्मीद है कि कोई और इसका जवाब दे सकता है।


इंटेल प्रोसेसर कई थ्रेड्स को बेहतर तरीके से कैसे संभालते हैं? एकल कोर के साथ, एक समय में केवल एक धागा निष्पादित होना चाहिए। मैं प्रोसेसर को आगे और पीछे जाने से सहमत हूं। आप वास्तव में ऐसा नहीं कर सकते हैं आप बेहतर कर सकते हैं?
committedandroider

यह एक अनुकूलन है जो कुछ उपयोग मामलों के लिए बेहतर प्रदर्शन देता है। आप हाइपर थ्रेडिंग के बारे में यहाँ पढ़ सकते हैं: en.wikipedia.org/wiki/Hyper-threading
जेरेमी फ्रेज़र

5

उत्तर अलग-अलग प्रणालियों और अलग-अलग कार्यान्वयनों में बेहद भिन्न होता है , लेकिन सबसे महत्वपूर्ण भाग हैं:

  1. एक थ्रेड में निष्पादन का एक स्वतंत्र धागा होता है (यानी आप संदर्भ-स्विच को इससे दूर कर सकते हैं, और फिर वापस, और यह फिर से चलना शुरू कर देगा जहाँ यह था)।
  2. एक धागे का जीवनकाल होता है (इसे दूसरे धागे द्वारा बनाया जा सकता है, और दूसरा धागा इसके खत्म होने की प्रतीक्षा कर सकता है)।
  3. इसमें संभवतः "प्रक्रिया" की तुलना में कम सामान जुड़ा हुआ है।

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

लिनक्स सहित कई आधुनिक यूनिक्स प्रणालियों में, जिनसे मैं सबसे अधिक परिचित हूं, सब कुछ थ्रेड्स है - एक प्रक्रिया केवल एक प्रकार का धागा है जो अपेक्षाकृत कुछ चीजें अपने माता-पिता के साथ साझा करता है (अर्थात यह अपनी मेमोरी मैपिंग, अपनी फाइल टेबल और अनुमतियाँ, आदि) पढ़ना man 2 clone, विशेष रूप से झंडे की सूची, वास्तव में यहाँ शिक्षाप्रद है।


क्या एक संदर्भ स्विच तभी होता है जब प्रोसेसर एक धागे से दूसरे में जाता है (चाहे उसी प्रक्रिया में या किसी अन्य में)?
committedandroider

-1

मैं वास्तव में उन जवाबों में से किसी के साथ खुश नहीं हूं, इसलिए मैं अपना खुद का यहां जोड़ने जा रहा हूं :) एक प्रोसेसर पर शेड्यूलिंग काम के लिए एक धागा कर्नेल अमूर्त है, एक धागा वह है जो कर्नेल आपको प्रोसेसर समय का प्रबंधन करने के लिए देता है और दूसरों के साथ काम साझा करें


1
-1 धागे कर्नेल द्वारा नहीं बनाए जाने चाहिए। कर्नेल-स्तर समर्थन के साथ थ्रेड्स वास्तव में कर्नेल द्वारा निर्धारित किए जाते हैं (जहां कुछ प्रकार के सीस्केल जारी किए जाते हैं)। लेकिन उपयोगकर्ता लाइब्रेरी-स्तरीय समर्थन के साथ थ्रेड भी हैं, थ्रेड टेबल के साथ उपयोगकर्ता अंतरिक्ष में रहते हैं।
AleksandrH

-1

पहले मुझे प्रक्रिया और थ्रेड्स के बीच का अंतर समझाएं।

एक प्रक्रिया में थ्रेड्स की संख्या {1..N} हो सकती है। वर्चुअल मेमोरी और वर्चुअल प्रोसेसर पर एक छोटी सी व्याख्या।

अप्रत्यक्ष स्मृति

स्वैप स्पेस के रूप में उपयोग किया जाता है ताकि एक प्रक्रिया सोचती है कि यह निष्पादन के लिए प्राथमिक मेमोरी पर बैठा है।

वर्चुअल प्रोसेसर

प्रोसेसर के लिए इसके अलावा वर्चुअल मेमोरी जैसी ही अवधारणा है। एक प्रक्रिया के लिए, यह दिखेगा कि यह केवल एक चीज है जो प्रोसेसर का उपयोग कर रहा है।

OS एक प्रक्रिया में वर्चुअल मेमोरी और वर्चुअल प्रोसेसर को आवंटित करने और प्रक्रियाओं के बीच स्वैप करने और निष्पादन करने का ध्यान रखेगा।

एक प्रक्रिया के भीतर सभी थ्रेड्स एक ही वर्चुअल मेमोरी साझा करेंगे। लेकिन, प्रत्येक थ्रेड में उनके व्यक्तिगत वर्चुअल प्रोसेसर को सौंपा जाएगा ताकि उन्हें व्यक्तिगत रूप से निष्पादित किया जा सके।

इस प्रकार सीपीयू को उसकी क्षमता के लिए उपयोग करने के साथ ही मेमोरी को सेव करना।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.