एक कोरटाइन क्या है?


204

एक कोरटाइन क्या है? वे कैसे संगामिति से संबंधित हैं?


2
समवर्ती कोड में "समानांतर" (नई शर्तों को लागू नहीं करने देना चाहिए) को चलाने की आवश्यकता नहीं है।
ल्यूसिड_ड्रीमर

2
मैंने लिनक्स, बीएसडी और विंडोज के लिए चुनिंदा / पोल / eplll / kqueue / iocp / Win GUI संदेशों का समर्थन करते हुए, मानक C के साथ एक coroutine लाइब्रेरी लिखी है। यह github.com/acl-dev/libfiber में एक ओपन-सोर्स प्रोजेक्ट है । सलाह वेलकम होगी।
शूएक्स झेंग

अधिक दिलचस्प जानकारी यहाँ: stackoverflow.com/q/16951904/14357
खर्च करें

मैं कल्पना कर सकता हूं कि अगर यह इस वर्तमान युग में पूछा जाए तो यह सवाल कम हो जाएगा। निश्चित नहीं है कि पहले की तुलना में सामुदायिक धारणा का इतना बड़ा अंतर क्यों है?
tnkh

एक कोरआउट एक ऐसा कार्य है जो लौटने से पहले इसके निष्पादन को निलंबित कर सकता है, और यह अप्रत्यक्ष रूप से कुछ समय के लिए किसी अन्य कोरटाइन पर नियंत्रण पारित कर सकता है।
परेशानीजादेह। Sd

जवाबों:


138

Coroutines और concurrency काफी हद तक ऑर्थोगोनल हैं। Coroutines एक सामान्य नियंत्रण संरचना है जिसके द्वारा प्रवाह नियंत्रण को सहकारी रूप से दो अलग-अलग रूटीनों के बीच बिना लौटे पास किया जाता है।

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


19
किसी फ़ंक्शन को सीधे कॉल करने और इस कॉरआउट में इस फ़ंक्शन को लपेटने के साथ एक coroutine से उपज के बीच क्या अंतर है?
मिंग ली

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

8
Coroutines are a general control structure whereby flow control is cooperatively passed between two different routines without returning.<- यह है संगामिति। आप जिस शब्द की तलाश कर रहे हैं, वह समानता है।
एडम एरॉल्ड

@steviejay orthogonal = Not similar to each other?
टॉनिक्स

1
@tonix मुझे बताया गया कि orthogonalइसका मतलब है "एक दूसरे से स्वतंत्र"।
रिक

77

लुआ में प्रोग्रामिंग से , " Coroutines" अनुभाग:

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

तो मुद्दा यह है: Coroutines "सहयोगी" हैं। यहां तक ​​कि मल्टी-कोर सिस्टम में, किसी भी समय केवल एक कोरटाइन चल रहा है (लेकिन कई धागे समानांतर में चल सकते हैं)। कोरटाइन के बीच गैर-निवारक है, चल रहे कोरआउट को स्पष्ट रूप से निष्पादन को त्यागना होगा।

" concurrency" के लिए, आप रोब पाइक की स्लाइड का उल्लेख कर सकते हैं :

Concurrency स्वतंत्र रूप से निष्पादित संगणना की रचना है।

इसलिए कॉरटीन ए के निष्पादन के दौरान, यह कॉरटीन बी को नियंत्रित करता है। फिर कुछ समय के बाद, कॉरटीन बी कॉरटाइन ए पर वापस नियंत्रण करता है, क्योंकि कोरटाइन के बीच निर्भरता होती है , और उन्हें अग्रानुक्रम में चलना चाहिए, इसलिए दो कॉरटाइन समवर्ती नहीं हैं ।


6
Coroutines स्वतंत्र रूप से निष्पादित नहीं करते हैं। वे बारी-बारी से काम करने के लिए दूसरे का इंतजार करते हैं। वे सक्रिय रूप से एक दूसरे के साथ समन्वय करते हैं। यह संक्षिप्तता के रोब Pikes परिभाषा के विपरीत है।
एरिक जी। हागस्ट्रॉम

2
@ ErickG.Hagstrom: हालांकि वे स्वतंत्र रूप से निष्पादित नहीं करते हैं, हर कॉरटीन का तर्क स्वतंत्र हो सकता है, है ना? अगर यह सही है, तो यह एक-कोर सीपीयू पर चलने वाले अन-प्रीपेक्टिव ओएस की तरह है, एक प्रक्रिया को अन्य कार्यों को चलाने के लिए सीपीयू को त्यागना होगा।
नान जिओ

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

7
@ क्रिसक्वार मैं आपसे सहमत हूँ। Coroutines संक्षिप्त हैं। विकिपीडिया के कुछ उद्धरण यहां दिए गए हैं
smwikipedia

3
और: सहकारी मल्टीटास्किंग, जिसे गैर-प्रीमेप्टिव मल्टीटास्किंग के रूप में भी जाना जाता है, कंप्यूटर मल्टीटास्किंग की एक शैली है जिसमें ऑपरेटिंग सिस्टम एक रनिंग प्रक्रिया से दूसरी प्रक्रिया में कभी भी संदर्भ स्विच शुरू नहीं करता है। इसके बजाय, प्रक्रियाएँ स्वैच्छिक रूप से या कई अनुप्रयोगों को समवर्ती रूप से चलाने के लिए सक्षम करने के लिए समय-समय पर निष्क्रिय या तार्किक रूप से अवरुद्ध होती हैं।
smwikipedia

47

मुझे अधिकांश उत्तर बहुत अधिक तकनीकी लगे, भले ही यह एक तकनीकी प्रश्न हो। मेरे पास एक कठिन समय था कि आप कोरटाइन प्रक्रिया को समझने की कोशिश करें। मैं इसे प्राप्त करना चाहता हूं, लेकिन फिर मैं इसे प्राप्त नहीं करता।

मुझे यह उत्तर बहुत मददगार लगा:

https://dev.to/thibmaek/explain-coroutines-like-im-five-2d9

इदान आर्य से उद्धृत करने के लिए:

अपनी कहानी बनाने के लिए, मैं इसे इस तरह से रखूँगा:

आप कार्टून देखना शुरू करते हैं, लेकिन यह इंट्रो है। इंट्रो देखने के बजाय आप गेम में स्विच करते हैं और ऑनलाइन लॉबी में प्रवेश करते हैं - लेकिन इसमें 3 खिलाड़ियों की आवश्यकता होती है और केवल आप और आपकी बहन इसमें हैं। अपने होमवर्क में शामिल होने के लिए किसी अन्य खिलाड़ी का इंतजार करने के बजाय, और पहले प्रश्न का उत्तर दें। दूसरे प्रश्न में एक YouTube वीडियो का लिंक है जिसे आपको देखने की आवश्यकता है। आप इसे खोलते हैं - और यह लोड करना शुरू कर देता है। इसे लोड करने के लिए इंतजार करने के बजाय, आप कार्टून पर वापस जाते हैं। इंट्रो खत्म हो गया है, इसलिए आप देख सकते हैं। अब इश्तेहार हैं - लेकिन इस बीच एक तीसरा खिलाड़ी भी शामिल हो गया है, इसलिए आप इस खेल को बंद कर दें ...

विचार यह है कि आप कार्यों को वास्तव में तेजी से स्विच नहीं करते हैं ताकि यह दिख सके कि आप एक ही बार में सब कुछ कर रहे हैं। आप उस समय का उपयोग करते हैं जब आप कुछ करने के लिए (IO) अन्य चीजों को करने के लिए इंतजार कर रहे होते हैं जिन्हें आपके प्रत्यक्ष ध्यान की आवश्यकता होती है।

निश्चित रूप से लिंक की जाँच करें, और भी बहुत कुछ है जो मैं सब कुछ उद्धृत नहीं कर सकता।


6
बहुत ही सरल और सीधा-साधा चित्रण। इसके लिए +1।
तस्लीम ओसेनी

महान चित्रण। मैंने एक समान कहानी का निर्माण किया - एक पैकेज लेने के लिए लाइन में खड़े होने के साथ। लेकिन आज के लिए, तुम्हारा बहुत अधिक यथार्थवादी है, जो दरवाजे पर 2 प्रसव होते हैं, जो लाइन में खड़ा होता है? लोल
अपोलक

1
यह बहुत बढ़िया विवरण है। उद्धरण से ही, यह सुपर स्पष्ट है।
फ़र्रुह हबीबुल्लाव

15

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


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

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

मूल रूप से, दो प्रकार के Coroutines हैं:

  1. stackless
  2. Stackful

कोटलिन स्टैकलेस कोरआउट्स को लागू करता है - इसका मतलब है कि कोरआउट्स का अपना स्टैक नहीं है, इसलिए वे देशी धागे पर मैप नहीं करते हैं।

ये कॉरआउट शुरू करने के कार्य हैं:

launch{}

async{}

आप यहाँ से और जान सकते हैं:

https://www.kotlindevelopment.com/deep-dive-coroutines/

https://blog.mindorks.com/what-are-coroutines-in-kotlin-bf4fecd476e9


1
अच्छा उत्तर! Kotlin और Android डेवलपर्स के लिए उपयोगी है।
मालविंदर सिंह

5

एक अलग नोट पर, पायथन geventलाइब्रेरी एक coroutineआधारित नेटवर्किंग लाइब्रेरी है, जो आपको थ्रेड बनाने और नष्ट करने के ओवरहेड के बिना, async नेटवर्क अनुरोध जैसी थ्रेडिअल सुविधाएं प्रदान करती है। coroutineइस्तेमाल किया पुस्तकालय है greenlet


2

से अजगर coroutine :

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

से Coroutines (सी ++ 20)

एक कोरआउट एक फ़ंक्शन है जो बाद में फिर से शुरू होने के लिए निष्पादन को निलंबित कर सकता है । Coroutines स्टैकलेस होते हैं: वे कॉल करने वाले पर लौटकर निष्पादन को निलंबित कर देते हैं। यह अनुक्रमिक कोड के लिए अनुमति देता है जो एसिंक्रोनस रूप से निष्पादित करता है (जैसे स्पष्ट कॉलबैक के बिना गैर-अवरुद्ध I / O को संभालने के लिए), और आलसी-गणना वाले अनंत अनुक्रमों और अन्य उपयोगों पर एल्गोरिदम का भी समर्थन करता है।

दूसरे के जवाब से तुलना करें:

मेरी राय में, @ ट्विंकल की तरह ही बाद में फिर से शुरू होने वाला हिस्सा एक मुख्य अंतर है।
हालाँकि दस्तावेज़ के कई क्षेत्र अभी भी प्रगति पर हैं, हालाँकि, यह हिस्सा ज्यादातर उत्तर के समान है, सिवाय @ नान ज़ियाओ के

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

चूंकि यह लुआ में कार्यक्रम से उद्धृत किया गया है, शायद यह भाषा से संबंधित है (वर्तमान में लुआ से परिचित नहीं है), सभी दस्तावेज़ों में केवल एक ही भाग का उल्लेख नहीं किया गया है ।

समवर्ती के साथ संबंध: कॉरआउट (C ++ 20)
का एक "निष्पादन" भाग है। यहाँ उद्धृत करने के लिए लंबा समय है। विस्तार के अलावा, कई राज्य हैं।

When a coroutine begins execution  
When a coroutine reaches a suspension point  
When a coroutine reaches the co_return statement  
If the coroutine ends with an uncaught exception  
When the coroutine state is destroyed either because it terminated via co_return or uncaught exception, or because it was destroyed via its handle 

@ user217714 के जवाब के तहत @Adam Arold की टिप्पणी के रूप में। यह निर्णायक है।
लेकिन यह मल्टीथ्रेडिंग से अलग है। एसटीडी से :: धागा

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

चूंकि यह संक्षिप्तता है, इसलिए यह मल्टीथ्रेडिंग की तरह काम करता है, विशेषकर जब प्रतीक्षा अपरिहार्य है (ओएस परिप्रेक्ष्य से), इसलिए भी यह भ्रामक है।


1

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

  • एक कोरआउट एक उपप्रोग्राम है जिसमें कई प्रविष्टियां हैं और उन्हें स्वयं नियंत्रित करता है - सीधे लुआ में समर्थित

  • इसे सममितीय नियंत्रण भी कहा जाता है: कॉल करने वाले और कॉरआउट को अधिक समान आधार पर कहा जाता है

  • कॉरआउट कॉल को फिर से शुरू करने का नाम दिया गया है

  • कोरटाइन का पहला रिज्यूमे इसकी शुरुआत है, लेकिन बाद में कॉल कॉइन में अंतिम निष्पादित स्टेटमेंट के बाद बिंदु पर दर्ज होता है

  • Coroutines बार-बार एक-दूसरे को फिर से शुरू करते हैं, संभवतः हमेशा के लिए

  • Coroutines प्रोग्राम यूनिट्स (coroutines) का अर्ध-समवर्ती निष्पादन प्रदान करते हैं; उनके निष्पादन में दखल है, लेकिन ओवरलैप नहीं किया गया है

उदाहरण 1 example2


1

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

  1. समवर्ती (कार्यक्रम) क्या है?

जो आर्मस्ट्रांग, पौराणिक द्वारा "प्रोग्रामिंग एरलांग" से उद्धृत :

एक समवर्ती कार्यक्रम संभावित रूप से एक समानांतर कंप्यूटर पर तेजी से चल सकता है।

  • समवर्ती कार्यक्रम एक समवर्ती प्रोग्रामिंग भाषा में लिखा गया कार्यक्रम है। हम प्रदर्शन, मापनीयता, या दोष सहिष्णुता के कारणों के लिए समवर्ती कार्यक्रम लिखते हैं।

  • समवर्ती प्रोग्रामिंग भाषा एक ऐसी भाषा है जिसमें समवर्ती कार्यक्रमों को लिखने के लिए स्पष्ट भाषा का निर्माण होता है। ये निर्माण प्रोग्रामिंग भाषा का एक अभिन्न हिस्सा हैं और सभी ऑपरेटिंग सिस्टम पर समान व्यवहार करते हैं।

  • समानांतर कंप्यूटर एक कंप्यूटर है जिसमें कई प्रोसेसिंग यूनिट (सीपीयू या कोर) होते हैं जो एक ही समय में चल सकते हैं।

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

समवर्ती कार्यक्रम में समानांतर कंप्यूटर में समानांतर चलने की क्षमता है लेकिन गारंटी नहीं है । OS आपको अपना प्रोग्राम चलाने के लिए केवल एक कोर दे सकता है।

इसलिए, संगामिति एक समवर्ती कार्यक्रम से एक सॉफ्टवेयर मॉडल है जिसका मतलब यह नहीं है कि आपका कार्यक्रम शारीरिक रूप से समानांतर में चल सकता है।

  1. coroutine और concurrency

शब्द "कोरटाइन" दो शब्दों से बना है: "सह" (सहकारी) और "दिनचर्या" (कार्य)।

ए। क्या यह संगामिति या समानता को प्राप्त करता है?

सरल होने के लिए, आइए इसे सिंगल-कोर कंप्यूटर पर चर्चा करें ।

Concurrency OS से टाइम-शेयर्स द्वारा हासिल की जाती है। एक CPU CPU कोर पर अपने नियत समय फ़्रेम में अपने कोड को निष्पादित करता है। यह ओएस द्वारा पूर्वनिर्मित किया जा सकता है। इससे OS पर नियंत्रण भी हो सकता है।

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

इसलिए, आप उपयोगकर्ता द्वारा OS (या अर्ध-समानता) द्वारा समय-शेयरों को प्राप्त करने के बारे में सोच सकते हैं । Coroutines धागे को सौंपे गए उसी कोर पर चलते हैं जो उन coroutines को चलाता है।

क्या कोराटाइन समानता प्राप्त करता है? यदि यह सीपीयू-बाउंड कोड है, तो नहीं। समय-शेयरों की तरह, यह आपको लगता है कि वे समानांतर में चलते हैं, लेकिन उनके निष्पादन को ओवरलैप नहीं किया जाता है। यदि यह IO- बद्ध है, तो हाँ, यह आपके कोड द्वारा हार्डवेयर (IO उपकरणों) के समानांतर प्राप्त होता है।

ख। फ़ंक्शन कॉल के साथ अंतर?

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

जैसा कि चित्र दिखाता है, इसे returnनियंत्रण स्विच करने के लिए कॉल करने की आवश्यकता नहीं है । इसके बिना उपज दे सकते हैं return। वर्तमान फ़ंक्शन फ़्रेम (स्टैक) पर एक coroutine सहेजता है और साझा करता है। जब आप रजिस्टर और स्थानीय चर को बचाने के लिए और कॉल स्टैक को रिवाइंड करने की जरूरत नहीं है, तो यह फ़ंक्शन की तुलना में बहुत हल्का है call ret


0

मैं @ user21714 के उत्तर पर विस्तार करूंगा। Coroutines निष्पादन के स्वतंत्र रास्ते हैं जो एक साथ नहीं चल सकते हैं। वे एक नियंत्रक पर निर्भर करते हैं - उदाहरण के लिए एक pythonनियंत्रक पुस्तकालय - इन रास्तों के बीच स्विचिंग को संभालने के लिए। लेकिन इसके लिए कोऑउटिन को काम करने के लिए स्वयं को yieldया ऐसी संरचनाओं को लागू करने की आवश्यकता होती है जो उनके निष्पादन को रोक देते हैं।

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

जैसे एक - आप एक multihreaded कार्यक्रम शुरू करने से इस आशय देख सकते हैं jvmआवेदन - जिसमें आपके के सभी आठ core i7hyperthread कोर उपयोग किया जाता है: आप में 797% उपयोग देख सकते हैं Activity Monitorया Top। इसके बजाय जब एक विशिष्ट pythonकार्यक्रम चल रहा हो - यहां तक ​​कि एक साथ coroutinesया python threading- उपयोग 100% पर अधिकतम होगा। यानी एक मशीन हाइपरथ्रेड।

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