इस नवीनतम सी ++ टीएस: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4628.pdf के अनुसार, और सी # एसिंक/भाषा समर्थन का इंतजार करने के आधार पर, मुझे आश्चर्य है कि "निष्पादन संदर्भ" क्या है (शब्दावली सी #) सी ++ coroutines के?सी ++ 1z कोरआउटिन थ्रेडिंग संदर्भ और कोरआउट शेड्यूलिंग
विजुअल सी ++ 2017 आरसी में मेरा सरल परीक्षण कोड बताता है कि कोरआउट हमेशा थ्रेड पूल थ्रेड पर निष्पादित प्रतीत होता है, और एप्लिकेशन डेवलपर को थोड़ा नियंत्रण दिया जाता है जिस पर थ्रेडिंग संदर्भ को कोरआउट को निष्पादित किया जा सकता है - उदा। क्या कोई आवेदन सभी कोरआउट (संकलक उत्पन्न राज्य मशीन कोड के साथ) को मुख्य थ्रेड पर निष्पादित करने के लिए मजबूर कर सकता है, बिना किसी थ्रेड पूल थ्रेड के?
सी # में, सिंक्रनाइज़ेशन कॉन्टेक्स्ट "संदर्भ" निर्दिष्ट करने का एक तरीका है जहां सभी कोरआउट "हिस्सों" (कंपाइलर उत्पन्न राज्य मशीन कोड) पोस्ट और निष्पादित किए जाएंगे, जैसा कि इस पोस्ट में दिखाया गया है: https://blogs.msdn.microsoft.com/pfxteam/2012/01/20/await-synchronizationcontext-and-console-apps/, जबकि वर्तमान कोरआउट कार्यान्वयन विज़ुअल सी ++ 2017 आरसी में हमेशा समवर्ती रनटाइम पर भरोसा होता है, जो डिफ़ॉल्ट रूप से जेनरेट पूल थ्रेड पर उत्पन्न राज्य मशीन कोड निष्पादित करता है। क्या सिंक्रनाइज़ेशन संदर्भ की एक समान अवधारणा है कि उपयोगकर्ता अनुप्रयोग कोरआउट निष्पादन को एक विशिष्ट धागे से बांधने के लिए उपयोग कर सकता है?
इसके अलावा, दृश्य सी ++ 2017 आरसी में लागू कोरआउट के वर्तमान डिफ़ॉल्ट "शेड्यूलर" व्यवहार क्या है? यानी 1) कैसे प्रतीक्षा की स्थिति बिल्कुल निर्दिष्ट है? और 2) जब प्रतीक्षा की स्थिति संतुष्ट होती है, तो निलंबित कोरआउट के "निचले आधे" का आह्वान कौन करता है?
सी # में कार्य शेड्यूलिंग के संबंध में मेरी (बेवकूफ) अटकलें यह है कि सी # कार्य कार्य निरंतरता द्वारा पूरी तरह से प्रतीक्षा की स्थिति को लागू करता है - एक प्रतीक्षा स्थिति को कार्यसमूह स्रोत के स्वामित्व वाले कार्य द्वारा संश्लेषित किया जाता है, और किसी भी कोड तर्क को प्रतीक्षा करने की आवश्यकता होती है इसके लिए निरंतरता के रूप में, इसलिए यदि प्रतीक्षा की स्थिति संतुष्ट है, उदाहरण के लिए यदि निम्न स्तर के नेटवर्क हैंडलर से एक पूर्ण संदेश प्राप्त होता है, तो यह कार्यकुशलता स्रोत .etValue करता है, जो अंतर्निहित कार्य को पूर्ण राज्य में परिवर्तित करता है, प्रभावी ढंग से जंजीर निरंतरता तर्क को निष्पादन शुरू करने की अनुमति देता है (कार्य को तैयार राज्य/सूची में डालकर पिछला बनाया गया राज्य) - सी ++ कोरआउटिन में, मैं अनुमान लगा रहा हूं कि std :: भविष्य और std :: वादा का उपयोग इसी तरह के तंत्र के रूप में किया जाएगा (std :: भविष्य कार्य है, जबकि std :: वादा कार्य पूर्णीकरण स्रोत है, और उपयोग आश्चर्यजनक रूप से भी समान है!) - सी ++ कोरआउटिन शेड्यूलर, यदि कोई है, तो व्यवहार करने के लिए कुछ समान तंत्र पर निर्भर करता है?
[संपादित करें]: कुछ और शोध करने के बाद, मैं एक बहुत ही सरल लेकिन बहुत शक्तिशाली अमूर्त कोड को कोड करने में सक्षम था जिसे एकल थ्रेडेड और सहकारी मल्टीटास्किंग का समर्थन करता है, और इसमें एक साधारण थ्रेड_लोकल आधारित शेड्यूलर है, जो कोरआउट को निष्पादित कर सकता है रूट कोरआउट शुरू किया गया है। कोड इस जिथब रेपो से पाया जा सकता है: https://github.com/llint/Awaitable
प्रतीक्षा योग्य इस तरह से संगत है कि यह नेस्टेड स्तरों पर सही आमंत्रण आदेश जारी रखता है, और इसमें आदिम उपज, समय प्रतीक्षा, और कहीं और से तैयार सेटिंग, और बहुत जटिल उपयोग पैटर्न इस से प्राप्त किया जा सकता है (जैसे अनंत लूपिंग कोरआउट जो कुछ घटनाओं के दौरान केवल जागृत हो जाते हैं), प्रोग्रामिंग मॉडल सी # कार्य आधारित async/निकटता पैटर्न का पालन करता है। कृपया अपनी प्रतिक्रिया देने के लिए स्वतंत्र महसूस करें।
महान प्रश्न! सी # में कार्य शेड्यूलिंग के लिए [github] (https://github.com/dotnet/coreclr/tree/master/src/mscorlib/src/System/Threading/Tasks) पर सभी खुले हैं, कुछ अच्छी अंतर्दृष्टि प्रदान करते हैं। सी ++ के लिए, प्रस्तावों में से एक [n4286] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4286.pdf) (ड्राफ्ट में किए जाने से पहले) कवर डेमो कार्यान्वयन बूस्ट के वायदा पर, लेकिन ऐसा लगता है कि 'कौन' निरंतरता का आह्वान करता है वास्तव में निर्भर करता है –
मुझे लगता है कि आपका प्रश्न थ्रेड/संदर्भ पर समान रूप से लागू है जहां [भविष्य :: तब] (http://en.cppreference.com/w/ सीपीपी/प्रयोगात्मक/भविष्य/फिर) कहा जाएगा, यानी अपरिभाषित ¯ \ _ (ツ) _/¯ –
टिप्पणियों के लिए धन्यवाद। "कौन" निरंतरता का आह्वान करता है, हालांकि, मैं अनुमान लगाता हूं कि कुछ प्रस्तावित मानक शब्द या सुविधाएं होनी चाहिए जो कस्टम सिंगल थ्रेड कोरआउट शेड्यूलर के कार्यान्वयन का समर्थन करेंगी - उदा।यदि सब कुछ मुख्य धागे पर निष्पादित किया जा रहा है, तो मुख्य शेड्यूलर लूप (या टिक) होना चाहिए जिसे मुख्य थ्रेड पर बुलाया जा सकता है कि सभी निर्धारित "कार्य हिस्सों" को निष्पादित किया जाएगा - या "मुख्य" धागा कोई भी धागा हो सकता है जिसे मैं अधिक अनियंत्रित थ्रेड पूल धागे के खिलाफ चुनता हूं। – Dejavu