मैं केवल एक आकस्मिक उपयोगकर्ता हूं, इसलिए नमक के एक दाने के साथ निम्नलिखित लें।
विकिपीडिया हरे रंग के धागों को " धागे के रूप में परिभाषित करता है जो एक आभासी मशीन (VM) द्वारा अंतर्निहित ऑपरेटिंग सिस्टम द्वारा मूल रूप से निर्धारित किए जाते हैं"। हरे रंग के धागे किसी भी मूल OS क्षमताओं पर भरोसा किए बिना बहुपरत वातावरण का अनुकरण करते हैं, और उन्हें कर्नेल स्थान के बजाय उपयोगकर्ता स्थान में प्रबंधित किया जाता है, जिससे उन्हें उन वातावरण में काम करने में सक्षम किया जाता है जिनमें मूल धागा समर्थन नहीं होता है।
गो (या वास्तव में दो मौजूदा कार्यान्वयन) केवल मूल कोड का उत्पादन करने वाली भाषा है - यह एक वीएम का उपयोग नहीं करता है। इसके अलावा, वर्तमान रनटाइम कार्यान्वयन में अनुसूचक OS स्तर के थ्रेड्स पर निर्भर करता है (तब भी जब GOMAXPROCS = 1)। इसलिए मुझे लगता है कि गो मॉडल के लिए हरे धागे के बारे में बात करना थोड़ा अपमानजनक है।
गो लोगों ने विशेष रूप से अन्य संगामिति तंत्रों (जैसे कोरआउट या थ्रेड्स या हल्के प्रक्रियाओं) के साथ भ्रम से बचने के लिए गोरोइनिन शब्द गढ़ा है।
बेशक, गो एक एम: एन थ्रेडिंग मॉडल का समर्थन करता है, लेकिन जावा ग्रीन मॉडल मॉडल की तुलना में यह एरलांग प्रक्रिया मॉडल के अधिक करीब दिखता है।
हरे धागे पर गो मॉडल के कुछ लाभ यहां दिए गए हैं (जैसा कि जल्दी JVM में लागू किया गया है):
डेवलपर के लिए पारदर्शी तरीके से एकाधिक कोर या सीपीयू का प्रभावी ढंग से उपयोग किया जा सकता है। गो के साथ, डेवलपर को कंसीडर का ध्यान रखना चाहिए। गो रनटाइम समानता का ख्याल रखेगा। जावा ग्रीन थ्रेड्स कार्यान्वयन कई कोर या सीपीयू से अधिक नहीं था।
सिस्टम और C कॉल शेड्यूलर के लिए नॉन ब्लॉकिंग हैं (सभी सिस्टम कॉल, न केवल मल्टीप्लेज्ड I / Os को इवेंट लूप में सपोर्ट करने वाले)। जब ब्लॉकिंग सिस्टम कॉल किया गया था, तो ग्रीन थ्रेड्स कार्यान्वयन पूरी प्रक्रिया को अवरुद्ध कर सकते हैं।
नकल या खंडित ढेर। गो में, गोरोइन के लिए अधिकतम स्टैक आकार प्रदान करने की आवश्यकता नहीं है। स्टैक आवश्यकतानुसार बढ़ता है। एक परिणाम यह है कि गोरोइन को बहुत अधिक मेमोरी (4KB-8KB) की आवश्यकता नहीं होती है, इसलिए उनमें से एक बड़ी संख्या खुशी से पैदा की जा सकती है। गोरोइन का उपयोग इसलिए व्यापक हो सकता है।
अब, आलोचनाओं को संबोधित करने के लिए:
गो के साथ, आपको यूजरस्पेस शेड्यूलर लिखने की ज़रूरत नहीं है: यह पहले से ही रनटाइम के साथ प्रदान किया गया है। यह सॉफ्टवेयर का एक जटिल हिस्सा है, लेकिन यह गो डेवलपर्स की समस्या है, गो उपयोगकर्ताओं की नहीं। इसका उपयोग गो उपयोगकर्ताओं के लिए पारदर्शी है। गो डेवलपर्स के बीच, दिमित्री व्युको लॉकफ्री / वेटफ्री प्रोग्रामिंग में एक विशेषज्ञ है, और वह विशेष रूप से अनुसूचक के अंतिम प्रदर्शन के मुद्दों को संबोधित करने में रुचि रखता है। वर्तमान अनुसूचक कार्यान्वयन सही नहीं है, लेकिन इसमें सुधार होगा।
सिंक्रनाइज़ेशन प्रदर्शन की समस्या और जटिलता लाता है: यह गो के साथ आंशिक रूप से सच है। लेकिन ध्यान दें कि गो मॉडल तुल्यकालन जटिलता को सीमित करने के लिए चैनलों के उपयोग और कार्यक्रम के एक स्वच्छ अपघटन को बढ़ावा देने की कोशिश करता है ताकि सिंक्रनाइज़ेशन जटिलता (यानी संचार को साझा करने के बजाय संचार को साझा करने के बजाय डेटा साझा करना)। वैसे, संदर्भ गो कार्यान्वयन प्रदर्शन और समवर्ती मुद्दों को संबोधित करने के लिए कई उपकरण प्रदान करता है, जैसे कि एक प्रोफाइलर और एक रेस डिटेक्टर ।
पृष्ठ दोष और "एकाधिक थ्रेड फ़ेकिंग" के बारे में, कृपया ध्यान दें कि गो कई सिस्टम थ्रेड्स पर गोरोइन को शेड्यूल कर सकता है। जब किसी कारण (थ्रेड फॉल्ट, सिस्टम कॉल को ब्लॉक करना) के लिए एक थ्रेड को ब्लॉक किया जाता है, तो यह अन्य थ्रेड्स को शेड्यूल करने और चलाने के लिए अन्य थ्रेड्स को रोकने के लिए नहीं रोकता है। अब, यह सही है कि एक पेज फॉल्ट OS थ्रेड को ब्लॉक करेगा, इस थ्रेड पर सभी गोरआउट्स को निर्धारित किया जाएगा। हालांकि व्यवहार में, गो ढेर मेमोरी को स्वैप नहीं किया जाना चाहिए। यह जावा में समान होगा: कचरा एकत्र की गई भाषाएँ वैसे भी वर्चुअल मेमोरी को अच्छी तरह से नहीं बनाती हैं। यदि आपके कार्यक्रम को पृष्ठ दोष को एक सुंदर तरीके से संभालना चाहिए, यदि यह संभवत: इसलिए क्योंकि इसमें कुछ ऑफ-हाइप मेमोरी का प्रबंधन करना है। उस स्तिथि में,
तो IMO, गोरोइन्ट्स हरे धागे नहीं हैं, और गो भाषा और वर्तमान कार्यान्वयन ज्यादातर इन आलोचनाओं को संबोधित करते हैं।