2009-11-14 8 views
5

का न्यूनतम कार्य आकार क्या किसी को यह पता है कि गोरौटाइन लाभकारी होने के लिए न्यूनतम कार्य आकार की आवश्यकता है (मान लीजिए कि काम को ऑफलोड करने के लिए मुफ्त कोर हैं)?गोरौटाइन

+0

आप शायद जाओ मेलिंग सूची पर एक बेहतर जवाब मिल जाएगा: http://groups.google.com/group/golang-nuts/ –

+2

@RCIX: हाँ, देखना http: // golang। संगठन/डॉक्टर/प्रभावी_go.html # goroutines –

उत्तर

3

मैं गो के साथ प्रोजेक्ट यूलर के माध्यम से प्लोडिंग कर रहा हूं। जबकि मेरे पास आपके लिए एक निश्चित उत्तर नहीं है, मुझे गो डॉक्स में गोरौटाइन-आधारित प्राथमिकता चलनी मिली है, जो कि प्रत्येक संख्या को केवल प्राथमिकता के लिए जांचने की तुलना में धीमी गति का क्रम है। GOMAXPROCS को उच्च मूल्य पर सेट करने से, या तो मदद नहीं मिली।

+2

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

4

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

एक ओओ सिस्टम के बारे में सोचें और कल्पना करें कि आपको किसी ऑब्जेक्ट को तुरंत चालू करना है या नहीं।

वह चीज़ करें जो पहले समझ में आता है।

+0

बिल्कुल, goroutines 'प्रोग्राम' आपके कार्यक्रमों को व्यवस्थित करने के लिए एक बहुत उपयोगी वैचारिक अमूर्त हैं। कि वे समांतरता सरल बनाकर प्रदर्शन बढ़ाने में मदद करते हैं, यह सिर्फ एक अच्छा साइड इफेक्ट है। – uriel

1

goroutines हल्के वजन वाले हैं और अधिक संसाधन नहीं लेते हैं। आपको उनका उपयोग करना चाहिए जहां कभी भी समस्या के लिए उपयुक्त है। वर्तमान में कई कोरों का उपयोग करने में असाधारण रूप से अच्छा प्रतीत नहीं होता है (ऐसा लगता है कि अतिरिक्त होस्ट थ्रेड आवंटित करने में थोड़ा अधिक ओवरहेड है।)

मुझे लगता है कि असली सवाल यह है कि जब एकाधिक कोर का उपयोग कब किया जाए goroutines का प्रयोग करें। इसका उत्तर शायद अन्य भाषाओं और अतिरिक्त होस्ट प्रक्रियाओं के समान ही है। (दुर्भाग्यवश आप आसानी से निर्दिष्ट नहीं कर सकते हैं जब एक गोरौटाइन को एक नई मेजबान प्रक्रिया पर कब्जा कर लेना चाहिए या जिस प्रक्रिया को इसे संभालना चाहिए।)

+1

गो-रूटीन वास्तव में नए धागे आवंटित नहीं करते हैं क्योंकि दिनचर्या मौजूदा सिस्टम थ्रेड पर म्यूटलीप्लेक्स होती है। यह मूल रूप से नीचे आता है जब यह एकाधिक कोर का उपयोग करने के लिए फायदेमंद होता है; हालांकि, उत्तर अन्य भाषाओं के समान नहीं होगा क्योंकि अन्य तुलनात्मक भाषाओं (सी, सी ++, जावा) में अंतर्निर्मित समानांतर निर्माण नहीं है और इसे मैन्युअल रूप से प्रबंधित या ओपनएमपी – Mark

+0

जैसे प्री-कंपाइलर निर्माण का उपयोग करना है, मैं समझता हूँ कि। मेरी पोस्ट इस तथ्य पर टिप्पणी कर रही है कि मेजबान प्रक्रियाओं को आवंटित करने वाली परिस्थितियों में goroutines का उपयोग करते समय होस्ट प्रक्रियाओं की संख्या सीमित होनी चाहिए। –

1

goroutines का उपयोग केवल हार्डवेयर दक्षता के बारे में नहीं है। कभी-कभी वे सॉफ़्टवेयर को लिखना आसान बनाते हैं और बग को बाहर रखना आसान बनाते हैं। भाषा प्रोग्रामर को स्वाभाविक रूप से और आसानी से समेकन व्यक्त करने की अनुमति देती है। यह मेरे लिए बहुत लायक है।

समेकन के लिए प्राकृतिक उम्मीदवारों की समस्याओं के साथ मेरा स्वयं का अनुभव यह है कि आसानी से मुझे एक छोटे से "स्कैटर/इकट्ठा" दृष्टिकोण का उपयोग करके सीपीयू बाध्य समस्याओं पर सभी उपलब्ध कोरों को अधिकतम करने की अनुमति देता है। आपकी माइलेज भिन्न हो सकती है।

Hotei