2011-06-10 17 views
13

में सोते हुए this सी # में थ्रेडिंग पर वेब ट्यूटोरियल, जोसेफ अल्बाहारी लिखते हैं: "पूल वाले धागे में सो जाओ मत!" आपको ऐसा क्यों नहीं करना चाहिए? यह प्रदर्शन को कितनी बुरी तरह प्रभावित कर सकता है? (ऐसा नहीं है कि मैं इसे करना चाहता हूं; मैं सिर्फ उत्सुक हूं।)पूल किए गए सी # थ्रेड

उत्तर

5

थ्रेड एक भारी वजन वस्तु है।
नया धागा बनाना बहुत सारे संसाधनों की आवश्यकता है, जैसे प्रबंधित स्टैक के लिए 1 एमबी असाइन करना, प्रबंधित थ्रेड ऑब्जेक्ट, कर्नेल स्टैक, कर्नेल थ्रेड ऑब्जेक्ट, उपयोगकर्ता थ्रेड पर्यावरण ब्लॉक बनाना। यह सब समय और स्मृति लेता है। इसलिए आप वस्तुओं को वास्तव में जल्दी से बनाना और नष्ट नहीं करना चाहते हैं। इसके अलावा, एक बार आपके पास एक से अधिक थ्रेड संदर्भ स्विचिंग के बाद कुछ संसाधन भी होंगे

थ्रेड पूल एक ऐसा स्थान है जहां सीएलआर अप्रयुक्त धागे डाल सकता है, यदि आपके आवेदन की आवश्यकता हो।
थ्रेडपूल में प्रारंभ में 0 धागे होते हैं, एक बार जब आप पूल से धागे का अनुरोध करते हैं, तो पूल पूल के लिए परिभाषित धागे की न्यूनतम संख्या को जल्दी से बना देगा। लगभग 2 मिनट के बाद अप्रयुक्त धागे मारे जाते हैं। लेकिन अगर लोड बढ़ता है और आपको अधिक धागे की आवश्यकता होती है, तो अधिकतम सीमा तक पहुंचने तक थ्रेड पूल धीरे-धीरे नए धागे बनाएगा। आपके पास अधिकतम से अधिक धागे नहीं हो सकते हैं, एक नए काम को पूल में लौटने के बाद सभी नए अनुरोध कतारबद्ध और निष्पादित किए जाएंगे। बदतर स्थिति में आप OutOfMemoryException

प्राप्त कर सकते हैं एक धागा एक पूल से लिया अवरुद्ध है, तो यह:

  • धारण संसाधनों
  • किसी भी मूल्यवान काम नहीं करता है, जबकि एक आवेदन आवश्यकता हो सकती है एक नया अनुरोध के लिए इस सूत्र शुरू ब्लॉक
13

थ्रेड पूल में केवल सीमित संख्या में धागे हैं; थ्रेड पूल को बड़ी संख्या में लघु कार्यों को कुशलतापूर्वक निष्पादित करने के लिए डिज़ाइन किया गया है। वे प्रत्येक कार्य को जल्दी खत्म करने पर भरोसा करते हैं, ताकि धागा पूल में वापस आ सके और अगले कार्य के लिए उपयोग किया जा सके।

तो थ्रेड पूल थ्रेड में सोते हुए पूल बाहर निकलता है, जो अंततः उपलब्ध धागे से बाहर हो सकता है, और आपके द्वारा निर्दिष्ट कार्यों को संसाधित करने में असमर्थ हो सकता है।

6

थ्रेड पूल एक नए धागे को बनाने की लागत खर्च किए बिना एक अलग धागे पर अपेक्षाकृत कम काम करने के लिए है। थ्रेड पूल में अधिकतम संख्या में धागे होते हैं, और एक बार यह पहुंचने के बाद, जब तक धागा उपलब्ध न हो जाए तब तक कार्य कतारबद्ध होते हैं।

थ्रेड पूल पर सोते धागे इसलिए कतार को पकड़ेंगे, या थ्रेड पूल थकावट में योगदान देंगे।

+0

में आप सबसे पहले द्वारा

  • ब्रेक scalability तुम क्या के बाकी ने खण्डन किया जा रहा है का कहना है। निश्चित रूप से कतार या धागा थकावट पकड़ना एक प्रत्यक्ष प्रदर्शन degrader है? – Chris

  • +0

    मेरा मतलब था कि पूल थ्रेड में सोना उस धागे के प्रदर्शन को कम नहीं करेगा। यह थोड़ा खराब वाक्यांश है, मैं सहमत हूं। मैंने इसे हटा दिया है। – Sven

    +0

    आह, हाँ, मैं देखता हूं कि आपका क्या मतलब है। यह एक धागे पर प्रदर्शन को कम नहीं करेगा लेकिन यह पूल का उपयोग कर पूरी प्रक्रिया के प्रदर्शन को कम कर देगा। यह समझ में आता है। :) – Chris

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