जब मेरे पास केवल 4 वर्चुअल सीपीयू हैं, तो 1805 धागे कैसे हो सकते हैं?


10

मैं सोच रहा था कि क्या कोई मुझे समझा सकता है कि मेरी गतिविधि मॉनिटर में यह कैसे कहा गया है कि मेरे पास वर्तमान में 1805 धागे हैं OS X एक्टिविटी मॉनिटर का स्क्रीन शॉट

लेकिन मेरे कंप्यूटर पर केवल 4 आभासी कोर हैं (जिसका अर्थ है कि मुझे केवल 4 धागे होने में सक्षम होना चाहिए)। क्या थ्रेड काउंट का मतलब उन सभी थ्रेड्स से है जो सीपीयू द्वारा नियंत्रित किए जा रहे हैं जब वे तय कर रहे हैं कि किस थ्रेड को निष्पादित करना है?

संपादित: कारण मुझे लगता है कि वहाँ केवल 4 धागे हो सकता है पर मेरी मशीन इस से आता है जवाब । मेरा मानना ​​है कि मेरी गलतफहमी 'थ्रेड' शब्द से अलग संदर्भ में इस्तेमाल हो रही है।


टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
bmike

जवाबों:


24

निर्धारण

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

ऑपरेटिंग सिस्टम (डार्विन और मैकओएस) की एक प्रमुख जिम्मेदारी यह तय करना है कि किस धागे को कितने समय के लिए किस कोर पर निष्पादित किया जाना है।

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

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

अधिक विवरण के लिए, मल्टीथ्रेडिंग के लिए विकिपीडिया पृष्ठ देखें ।

साथ ही मल्टी थ्रेडिंग

आपके लिंक किए गए प्रश्न के लिए , धागे वास्तव में यहाँ के समान हैं।

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

कुछ सीपीयू निर्माताओं ने इस समय में कटौती करने के लिए तकनीक विकसित की है ताकि थ्रेड की एक जोड़ी के बीच बहुत तेजी से स्विच किया जा सके। इंटेल उनकी तकनीक को हाइपर-थ्रेडिंग कहता है । सामान्य रूप से एक साथ बहु-थ्रेडिंग (SMT) के रूप में जाना जाता है ।

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

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

तो सीपीयू फर्मवेयर में एक विकल्प है जहां एक sysadmin SMT को अक्षम करने के लिए मशीन पर एक स्विच फेंक सकता है यदि वह निर्णय लेता है कि यह उसके उपयोगकर्ताओं को एक ऐप चलाने वाले को लाभान्वित करेगा जो असामान्य रूप से सीपीयू-पॉज़ करने के लिए बहुत कम अवसरों के साथ है।

ऐसे मामले में हम आपके मूल प्रश्न पर वापस आते हैं: इस विशेष स्थिति में आप वास्तव में इन अति-सक्रिय थ्रेड्स का कोई और संचालन नहीं करना चाहते हैं, क्योंकि आपके पास भौतिक कोर हैं। लेकिन मुझे दोहराना चाहिए: यह एक बहुत ही असामान्य स्थिति है जो किसी विशेष वैज्ञानिक डेटा-क्रंचिंग परियोजना की तरह हो सकती है, लेकिन लगभग कभी भी सामान्य व्यवसाय / कॉर्पोरेट / उद्यम परिदृश्यों पर लागू नहीं होगी।


टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
bmike

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

हाइपरथ्रेडिंग का आपका वर्णन गलत है। हार्डवेयर धागे! = सॉफ्टवेयर थ्रेड्स, वे निष्पादन संदर्भ / तार्किक कोर हैं। एक भौतिक कोर पर दोनों तार्किक कोर वास्तव में एक ही समय में अपने निर्देश चलाते हैं। थ्रेड्स (प्रत्येक चक्र) के बीच का अगला छोर वैकल्पिक है, लेकिन आउट-ऑफ-ऑर्डर निष्पादन कोर एक ही चक्र में दोनों थ्रेड्स से निर्देशों / uops को निष्पादित कर सकता है। यह निर्देश-स्तर की समानता को दो थ्रेड्स से ओओओ निष्पादन तक काम के साथ खिलाए गए निष्पादन इकाइयों को बेहतर रखने के लिए उजागर करता है (यह मूल रूप से एसएमटी का बिंदु है)। यह सिर्फ "अनुकूलित संदर्भ स्विचिंग" नहीं है।
पीटर कॉर्डेस


7

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

यहाँ छवि विवरण दर्ज करें

अब - समय में अंतर के परिमाण के कारण - भंडारण या नेटवर्क से डेटा प्राप्त करने की तुलना में सीपीयू और कैश इतनी तेजी से काम करते हैं - कि हजारों धागे आते हैं और जा सकते हैं जबकि एक धागा www.google.com के लिए प्रतीक्षा कर रहा है पैकेट या दो डेटा तो यही कारण है कि आप वास्तविक सीपीयू की तुलना में इतने अधिक धागे देखते हैं।

यदि आप थ्रेड संचालन को काले / नीले समय के पैमाने पर करते हैं और उन्हें एक सेकंड = 1 एन एस में परिवर्तित करते हैं, तो हम जिन चीज़ों की परवाह करते हैं वे डिस्क आईओ की तरह हैं 100 माइक्रोसेकंड 4 दिनों की तरह हैं और एक 200 एमएस इंटरनेट राउंड ट्रिप एक है यदि आप CPU समय के पैमाने पर सेकंड गिन रहे हैं तो 20 साल की देरी। दस अभ्यासों की कई शक्तियों की तरह , लगभग सभी मामलों में - सीपीयू "महीनों" के लिए बेकार बैठता है, बहुत, बहुत धीमी गति से बाहरी दुनिया से सार्थक काम की प्रतीक्षा करता है।

छवि में कुछ भी नहीं लगता है जिसे आपने पोस्ट किया है इसलिए शायद हम गलत समझ रहे हैं कि आपको थ्रेड्स के बारे में सोचकर क्या मिल रहा है।

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


टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
bmike

1

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

एक बार (सोचिए, 1950- '60 के दशक), कंप्यूटर एक समय में केवल एक ही काम कर सकता था। वे बहुत महंगे थे, पूरे कमरे भरे हुए थे, और हमें उन्हें कई लोगों के बीच साझा करके उनका कुशल उपयोग करने का तरीका चाहिए था। ऐसा करने का पहला तरीका बैच प्रसंस्करण था , जिसमें उपयोगकर्ता कंप्यूटर को कार्य प्रस्तुत करेंगे और उन्हें कतारबद्ध किया जाएगा, एक के बाद एक निष्पादित किया जाएगा और परिणाम उपयोगकर्ता को वापस भेजे जाएंगे। यह ठीक था, लेकिन इसका मतलब यह था कि, यदि आप एक गणना करना चाहते हैं जो कुछ दिनों के लिए लेने वाला था, उस समय कोई अन्य व्यक्ति कंप्यूटर का उपयोग नहीं कर सकता था।

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

यह सब विशाल मेनफ्रेम शैली के कंप्यूटरों के लिए था। जब व्यक्तिगत कंप्यूटर लोकप्रिय होने लगे, तो वे शुरू में बहुत शक्तिशाली नहीं थे और, हे, क्योंकि वे व्यक्तिगत थे, ऐसा लगता था कि उनके लिए केवल एक काम करना और nbdp करने में सक्षम होना ठीक था; - एक बार आवेदन - एक बार में (विचार, 1980 के दशक)। लेकिन, जैसा कि वे और अधिक शक्तिशाली हो गए (विचार करें, 1990 के दशक में पेश करने के लिए), लोग अपने व्यक्तिगत कंप्यूटरों को समय-साझा करना चाहते थे, भी।

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

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

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

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