कोरआउटिन क्या है? वे समवर्ती से कैसे संबंधित हैं?कोरआउटिन क्या है?
उत्तर
कोरआउट और समरूपता काफी हद तक ऑर्थोगोनल हैं। Coroutines एक सामान्य नियंत्रण संरचना है जिससे प्रवाह नियंत्रण दो अलग-अलग दिनचर्या के बीच वापस लौटने के बिना सहकारी रूप से पारित किया जाता है।
पायथन में 'उपज' कथन एक अच्छा उदाहरण है। यह एक कोरआउट बनाता है। जब 'उपज' का सामना किया जाता है तो फ़ंक्शन की वर्तमान स्थिति सहेजी जाती है और कॉलिंग फ़ंक्शन पर नियंत्रण वापस कर दिया जाता है। कॉलिंग फ़ंक्शन निष्पादन को वापस उपज करने वाले फ़ंक्शन में स्थानांतरित कर सकता है और इसकी स्थिति उस बिंदु पर पुनर्स्थापित की जाएगी जहां 'उपज' का सामना किया गया था और निष्पादन जारी रहेगा।
इस फ़ंक्शन को सीधे इस कोरआउट में लपेटने के साथ सीधे फ़ंक्शन को कॉल करने और कोरआउट से उपज करने के बीच क्या अंतर है? –
यह स्पष्ट करना बेहतर हो सकता है कि इस संदर्भ में इन दोनों अवधारणाओं को वास्तव में 'ऑर्थोगोनल' नहीं है। आप निश्चित रूप से आकर्षित कर सकते हैं कि दो अवधारणाएं एक दूसरे के समान कैसे हैं। दो या दो से अधिक चीजों के बीच नियंत्रण पारित करने का विचार बहुत समान है। – steviejay
Programming in Lua से, "Coroutines
" अनुभाग:
एक coroutine (बहु सूत्रण के अर्थ में) एक धागे के समान है: यह निष्पादन की एक पंक्ति है, अपने स्वयं के ढेर, अपने स्वयं के स्थानीय चर के साथ, और इसके अपने निर्देश सूचक; लेकिन यह वैश्विक चर और अन्य कोरआउट के साथ अन्य कुछ साझा करता है। धागे और कोरआउट के बीच मुख्य अंतर यह है कि, अवधारणात्मक रूप से (या शाब्दिक रूप से, एक मल्टीप्रोसेसर मशीन में), धागे के साथ एक कार्यक्रम समानांतर में कई धागे चलाता है। दूसरी ओर, कोरआउट, सहयोगी हैं: किसी भी समय, कोरआउट के साथ एक कार्यक्रम अपने कोरआउटों में से केवल एक चला रहा है, और यह चल रहा कोरआउटिन केवल तभी निलंबित होने का अनुरोध करता है जब यह स्पष्ट रूप से निलंबित होने का अनुरोध करता है।
तो बिंदु है: Coroutines "सहयोगी" हैं। बहु-कोर सिस्टम में भी, किसी भी समय पर केवल एक कोरआउट चल रहा है (लेकिन एकाधिक धागे समानांतर में चल सकते हैं)। कोरआउट के बीच गैर-प्रीपेप्टिव है, चल रहे कोरआउटिन को निष्पादन को स्पष्ट रूप से छोड़ देना चाहिए।
"concurrency
" के लिए, आप उल्लेख कर सकते हैं रोब पाईक slide:
कन्करेंसी स्वतंत्र रूप से क्रियान्वित करने संगणना की रचना है।
तो coroutine एक के निष्पादन के दौरान, यह नियंत्रण से गुजरता है तो फिर कुछ समय के बाद बी coroutine को, coroutine बी coroutine ए को वापस नियंत्रण गुजरता है के बाद से वहाँ निर्भरता coroutines के बीच है, और वे मिलकर चलाना चाहिए, इसलिए दो कोरआउट संगतता नहीं हैं।
मैं इस जवाब को तब तक प्यार करता था जब तक कि मुझे अंतिम वाक्य नहीं मिला। इसका क्या मतलब है? क्या आपने "सहमति" गलत वर्तनी की थी? यदि ऐसा है, तो यह निष्कर्ष प्रदान की गई परिभाषा से मेल नहीं खाता है। या यह एक नया शब्द "concurreny" होने का मतलब है? उस शब्द का मतलब क्या है? –
@ ErickG.Hagstrom: क्षमा करें, मैंने 'concurrency' गलत वर्तनी'। आपको क्यों लगता है कि निष्कर्ष प्रदान की गई परिभाषा से मेल नहीं खाता है? –
Coroutines स्वतंत्र रूप से निष्पादित नहीं करते हैं। वे मोड़ लेते हैं, प्रत्येक दूसरे के काम के कुछ हिस्से को करने का इंतजार कर रहा है। वे सक्रिय रूप से एक-दूसरे के साथ समन्वय करते हैं। यह समेकन की रोब पिक्स परिभाषा के विपरीत है। –
कोरआउटिन subroutine/धागे के समान है। अंतर एक बार कॉलर ने एक सबराउटिन/धागे को बुलाया है, यह कभी भी कॉलर फ़ंक्शन पर वापस नहीं आ जाएगा। लेकिन कॉलर कुछ कोड के निष्पादन के बाद कॉलर पर वापस लौट सकता है, जिससे कॉलर अपने कुछ कोड निष्पादित कर सकता है और कोरआउटिन पॉइंट पर वापस आ सकता है जहां उसने निष्पादन रोक दिया और वहां से जारी रखा। यानी। एक coroutine एक से अधिक प्रवेश और निकास अंक
एक अलग टिप्पणी पर, अजगर में gevent
पुस्तकालय एक coroutine
आधारित नेटवर्किंग पुस्तकालय जो आप async नेटवर्क अनुरोधों की तरह धागे जैसे सुविधाओं देता है, बनाने और धागे को नष्ट करने में भूमि के ऊपर के बिना है। coroutine
लाइब्रेरी का उपयोग greenlet
है।
- Coroutines महान Kotlin भाषा
- Coroutines में उपलब्ध सुविधाओं अतुल्यकालिक लेखन, गैर अवरुद्ध कोड (और भी बहुत कुछ)
- coroutine हल्के वजन धागे हैं का एक नया तरीका कर रहे हैं। हल्के वजन धागे का अर्थ यह है कि देशी धागे पर नक्शा नहीं लगाता है, इसलिए प्रोसेसर पर संदर्भ स्विचिंग की आवश्यकता नहीं है, इसलिए वे तेज़ हैं।
- यह देशी धागे पर नहीं है
- कोरआउट और धागे दोनों मल्टीटास्किंग हैं। लेकिन अंतर यह है कि उपयोगकर्ताओं द्वारा ओएस और कोरआउट द्वारा धागे प्रबंधित किए जाते हैं।
मूल रूप से, वहाँ Coroutines के दो प्रकार हैं:
- stackless
- Stackful
Kotlin लागू करता stackless coroutines - इसका मतलब है कि coroutines खुद ढेर की जरूरत नहीं है, इसलिए वे मूल धागे पर नक्शा नहीं बनाते हैं।
launch{}
async{}
आप यहाँ से अधिक जान सकते हैं:
https://www.kotlindevelopment.com/deep-dive-coroutines/
https://blog.mindorks.com/what-are-coroutines-in-kotlin-bf4fecd476e9
- 1. कोरआउटिन बनाम निरंतर बनाम जनरेटर
- 2. क्या मेकॉनटेक्स्ट()/swapcontext() फ़ंक्शन C++
- 3. जेएएफ क्या है? इसका उद्देश्य क्या है?
- 4. जीएलबीबीसी क्या है? इसका क्या उपयोग है?
- 5. क्या है?
- 6. क्या आवश्यकता है ('../') मतलब है?
- 7. आईओएस नेटवर्किंग इंटरफेस नाम का क्या अर्थ है? पीडीपी_आईपी क्या है? क्या चल रहा है?
- 8. तिरु अन्य लुआ वेब ढांचे की तुलना कैसे करता है?
- 9. आभासी निर्देशिका क्या है? इसका क्या उपयोग है?
- 10. एक सार सिंटेक्स वृक्ष क्या है/क्या इसकी आवश्यकता है?
- 11. क्या यह कोड एक शोषण है? यह कोड क्या है?
- 12. उपयोगकर्ता की कहानी क्या है और क्या नहीं है?
- 13. क्या कोई जानता है कि gvfsd-http क्या है?
- 14. बॉक्सन क्या है और यह क्या करता है?
- 15. एक PHP ढांचा क्या है और क्या अच्छा है?
- 16. वेबपृष्ठ क्या है: संस्करण सेटिंग क्या करती है?
- 17. jQuery में, $ .fn क्या करता है। क्या मतलब है?
- 18. अप्रत्यक्ष विस्तार क्या है? $ {! Var *} का क्या अर्थ है?
- 19. लिनक्स प्रक्रिया तालिका क्या है? इसमें क्या शामिल होता है?
- 20. एमवीवीएम स्पष्टीकरण: व्यूमोडेल में क्या है, मॉडल में क्या है?
- 21. मूल पुस्तकालय क्या है? बाध्यकारी की आवश्यकता क्या है?
- 22. डार्ट "एक्सपोन्डो" सुविधा क्या है, यह क्या करता है?
- 23. inverse_of क्या करता है? यह एसक्यूएल क्या उत्पन्न करता है?
- 24. एक .pid फ़ाइल क्या है और इसमें क्या शामिल है?
- 25. बाइट क्या है और बाइनरी के साथ क्या करना है?
- 26. SetFileValidData क्या करता है? SetEndOfFile के साथ क्या अंतर है?
- 27. ईसीएमएस्क्रिप्ट एडिटन 5.1 क्या है, और इसके लिए क्या है?
- 28. एसएसआईएस पैकेज क्या है और यह क्या करता है?
- 29. query_cache_min_res_unit; यह क्या है और यह क्या करता है?
- 30. डबल * (* पी [3]) (शून्य * (*)()) क्या करता है; क्या मतलब है?
समवर्ती कोड जरूरी नहीं है में चलाने के लिए है
इन कार्यों coroutine शुरू करने के लिए कर रहे हैं "समांतर" (चलिए नए नियम पेश नहीं करते हैं)। – user1712447
मैंने मानक सी के साथ एक कोरआउट लाइब्रेरी लिखी है, जो लिनक्स, बीएसडी और विंडोज के लिए चयन/पोल/ईप्ल/क्यूक्यू/आईओसीपी/विन जीयूआई संदेश का समर्थन करती है। यह https://github.com/acl-dev/libfiber में एक ओपन-सोर्स प्रोजेक्ट है। सलाह अच्छी होगी। –