एसिंक्रोनस प्रोग्रामिंग मॉडल में कोड लिखने के मुख्य उद्देश्यों में से एक (अधिक विशेष रूप से - धागे को अवरुद्ध करने के बजाय कॉलबैक का उपयोग करके) सिस्टम में अवरुद्ध थ्रेड की संख्या को कम करना है।अवरुद्ध धागे को कौन से संसाधन लेते हैं
धागे चलाने के लिए, यह लक्ष्य स्पष्ट है, संदर्भ स्विच और सिंक्रनाइज़ेशन लागतों के कारण।
लेकिन अवरुद्ध धागे के बारे में क्या? उनकी संख्या को कम करना इतना महत्वपूर्ण क्यों है?
उदाहरण के लिए, जब किसी वेब सर्वर से प्रतिक्रिया की प्रतीक्षा की जाती है तो थ्रेड अवरुद्ध होता है और किसी भी CPU समय को नहीं लेता है और किसी भी संदर्भ स्विच में भाग नहीं लेता है।
तो मेरा सवाल है: रैम के अलावा (लगभग 1 एमबी प्रति धागा?) अन्य संसाधन अवरुद्ध धागे क्या करते हैं?
और एक और अधिक व्यक्तिपरक सवाल: क्या मामलों इस कीमत वास्तव में अतुल्यकालिक कोड लिखने की परेशानी का औचित्य साबित होगा (कीमत हो सकता है, उदाहरण के लिए, beginXXX और EndXXX तरीकों की बहुत सारी करने के लिए अपने अच्छे सुसंगत विधि बंटवारे, और चलती मानकों और वर्ग चर होने के लिए स्थानीय चर)।
अद्यतन - अतिरिक्त कारण मैं उल्लेख नहीं किया था या करने के लिए पर्याप्त वजन नहीं दिया:
अधिक धागे
अधिक धागे का मतलब सांप्रदायिक संसाधनों के बारे में अधिक ताला अधिक निर्माण और के निपटान का मतलब थ्रेड जो महंगा है
सिस्टम निश्चित रूप से थ्रेड/रैम से बाहर चला सकता है और फिर सर्विसिंग क्लाइंट को रोक सकता है (वेब सर्वर परिदृश्य में यह वास्तव में सेवा को नीचे ला सकता है)
क्विबल: उत्तर संदर्भ पर निर्भर हो सकता है। उदाहरण के लिए, आईआईएस कार्यकर्ता धागे एक सीमित वस्तु है, जबकि ओएस धागे कम हैं। विस्तार सहायक होगा। –
मैंने कभी भी असीमित कोड का उद्देश्य होने के लिए मौजूदा धागे की संख्या को कम करने के बारे में कभी नहीं सुना है। परिभाषा के अनुसार, असीमित कोड, सिंक्रोनस (एकल थ्रेडेड!) कोड से अधिक धागे होने पर निर्भर करता है। –
@ हार्पर: [असहमत।] (Http://blogs.msdn.com/b/ericlippert/archive/2010/11/04/asynchrony-in-c-5-0-part-four-it-s-not -magic.aspx) –