2011-09-20 11 views
17

रनटाइम को कॉल करते समय रनटाइम.गोमैक्सप्रोसेस (1) को कॉल करने के दौरान केवल आपके सभी गोरोटाइन के लिए एक थ्रेड का उपयोग किया जाएगा। Io करते समय आपके goroutines उपज होगा और अन्य goroutines एक ही धागे पर चलने दें।.net Async और google के बीच मुख्य अंतर क्या है हल्के वजन धागे

यह मेरे जैसा ही लगता है कि .NET Async CTP सुविधा सहकारी समरूपता कैसे कर रही है यदि आप पृष्ठभूमि धागे का उपयोग नहीं कर रहे हैं।

मेरा प्रश्न यह है कि आप किस लाभ या कमी को दूसरे पर एक मेथोड के बारे में सोच सकते हैं।

उत्तर

23

मूल्य निर्धारण करना हमेशा एक मुश्किल बात है इसलिए मैं 3 मतभेदों को उजागर करूंगा। आप तय करते हैं कि वे "प्रो" या "कॉन" बाल्टी में आते हैं या नहीं।

  1. जबकि दोनों जाओ और async आप एक सरल तरीके से async कोड लिखने की अनुमति देते हैं, .NET में जैसा कि आप जानते हैं कि आपका कोड का कौन सा हिस्सा async है और जो एक नहीं है (यानी आप स्पष्ट रूप से करने के लिए है async/प्रतीक्षा कीवर्ड का उपयोग करें)। जाओ में आपको यह जानने की आवश्यकता नहीं है - रनटाइम इसे "बस काम करता है" बनाता है, एसिंक कोड को चिह्नित करने के लिए कोई विशेष वाक्यविन्यास नहीं है।

  2. गो डिज़ाइन को मानक लाइब्रेरी में किसी भी विशेष कोड की आवश्यकता नहीं है। .NET को प्रत्येक एसिंक ऑपरेशन के लिए मानक लाइब्रेरी में नया कोड जोड़ने की आवश्यकता है, अनिवार्य रूप से उन मामलों के लिए एपीआई सतह को दोगुना करना उदा। नया async http डाउनलोड एपीआई है और पुराना, गैर-एसिंक http डाउनलोड एपीआई पिछड़ा संगतता के लिए रहना है।

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

.NET कार्यान्वयन पहले उपर्युक्त नए एपीआई को जोड़ने की आवश्यकता है। इसके अलावा .NET कार्यान्वयन एसिंक/समकक्ष राज्य मशीनों में प्रतीक्षा के साथ कंपाइलर रीराइटिंग कोड पर आधारित है। यह बहुत चालाक है बल्कि जटिल भी है। व्यावहारिक परिणाम यह था कि पहले एसिंक सीटीपी को बग ज्ञात थे जबकि गो का कार्यान्वयन शुरुआत से काफी काम कर रहा था।

आखिरकार, यह वास्तव में कोई फर्क नहीं पड़ता। async/await .NET में async कोड लिखने का सबसे अच्छा तरीका है। गोरौटाइन्स गो में जाने का सबसे अच्छा तरीका है। दोनों महान हैं, खासकर अधिकतर भाषाओं में विकल्पों की तुलना में।

+0

वास्तव में बहुत अच्छा जवाब आपको धन्यवाद। मैं किसी ऐसे व्यक्ति के लिए निष्पादन गति प्रदर्शन की अवधि में और सोच रहा था जिसे 2 भाषा के बीच चयन करने की आवश्यकता है। – skyde

+10

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

+0

क्या कोई उदाहरण प्रदान कर सकता है कि गो में कितना इंतजार किया जाएगा? जहां तक ​​मुझे पता है, ऐसी कोई बात नहीं है। – Kugel

संबंधित मुद्दे