2011-07-04 11 views
14

मुझे पायथन में कोरआउट पर बहुत सी बातचीत और लेख देख रहे हैं। उन्हें "माइक्रोथ्रेड" माना जाता है और मैंने सुना है कि वे प्रदर्शन में सुधार करते हैं।कोरआउट्स प्रदर्शन में सुधार कैसे करते हैं

कोरआउट्स प्रदर्शन में सुधार कैसे करते हैं? जो मैंने अभी तक देखा है, वे एकल थ्रेड किए गए हैं और अनुक्रम में निष्पादित हैं। मैं मानता हूं कि एक डिजाइन परिप्रेक्ष्य से वे विशेष रूप से निर्माता/उपभोक्ता प्रकार के अनुप्रयोगों में काफी सुरुचिपूर्ण हैं।

मुझे लगता है कि मुझे बिंदु याद आ रहा है। क्या कोई समझाने में मदद कर सकता है?

उत्तर

10

कोरआउट्स वास्तव में बहुत सीमित अर्थ को छोड़कर प्रदर्शन में सुधार नहीं करते हैं: बहु-थ्रेडेड प्रोग्रामों में एक निश्चित ओवरहेड होता है और कोरआउट्स उन ओवरहेड्स के बिना थ्रेडिंग के कुछ लाभ प्रदान करते हैं। हालांकि, अधिकांश बहु-थ्रेडेड अनुप्रयोग (यहां तक ​​कि सी-पायथन में जीआईएल के साथ) ओवरलैप से लाभ होता है जब एक सिस्टम कॉल और अन्य धागे पर एक थ्रेड ब्लॉक चलाया जा सकता है: यह आम तौर पर कोरआउट के साथ नहीं होता है।

यदि आपके पास कुछ धागे हैं तो आमतौर पर ओवरलैपिंग जीत जाती है और कोरआउटिन कोई प्रदर्शन लाभ नहीं देते हैं। यदि आपको हजारों धागे की आवश्यकता है तो थ्रेड स्विच ओवरहेड्स बहुत अधिक होंगे और उस स्थिति में कोरआउटिन लाभ दे सकते हैं लेकिन धागे की संख्या को कम करने से अधिक लाभ मिल सकता है।

कोरआउट के वास्तविक लाभ यह है कि निर्माता/उपभोक्ता अनुप्रयोगों के लिए वे कोडिंग को बहुत आसान बनाते हैं और इसलिए कोड के लिए तेज़ी से बनाते हैं।

8

यह एक अच्छा सवाल है, यह मुझे David Beazley'sA Curious Course on Coroutines and Concurrency की याद दिलाता है। डेविड न केवल यह समझाने का उत्कृष्ट काम करता है कि पाइथन में कोरआउट कैसे काम करते हैं, लेकिन उपयोग के मामले जहां वे वास्तव में जेब में हैं।

उनका लेखन यह इंगित करता है कि प्रदर्शन लाभ उन कार्यों को पूरा करने के लिए कम ओवरहेड होने से आता है जिसके लिए आप आमतौर पर हैंडलर क्लास का उपयोग करते हैं (his presentation की स्लाइड 51 देखें)।

तो @Duncan's answer की तरह, ऐसी स्थितियां, जहां ओवरहेड मायने रखती है (जैसे कई धागे हैं), कोरआउट एक प्रदर्शन जीत है, लेकिन कोरआउट केवल प्रदर्शन से कहीं अधिक है।

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