2014-07-12 7 views
5

के बीच क्या अंतर है मैंने विंडो थ्रेड पूल के बारे में कुछ सेगमेंट पढ़े हैं। यह सीएलआर थ्रेड पूल की तरह दिखता है।विंडोज थ्रेड पूल और सीएलआर थ्रेड पूल

सीएलआर विंडोज पर आधारित है, इसलिए सीएलआर थ्रेड विंडोज थ्रेड पूल पर आधारित है, क्या यह सही है?

मुझे पता है कि प्रत्येक .net प्रक्रिया में एक थ्रेड पूल होता है, विंडोज थ्रेड पूल में स्थिति क्या होती है? ओएस में एक थ्रेड पूल या कई हैं?

सी # में, डेवलपर कोड द्वारा विंडो थ्रेड पूल को नियंत्रित कर सकता है?

+3

जब आप जो कुछ पढ़ते हैं उसके बारे में पूछते हैं, तो एक लिंक (या कम से कम एक प्रकाशन नाम) शामिल करें। –

उत्तर

13

यह उन सीएलआर कार्यान्वयन प्रश्नों में से एक है जिसका सीधा जवाब नहीं है। यह निर्धारित करने के लिए सीएलआर पर निर्भर नहीं है कि थ्रेडपूल कैसे कार्यान्वित किया जाता है। यह सीएलआर होस्ट का काम है। सॉफ्टवेयर की एक परत जो ऑपरेटिंग सिस्टम के साथ सीएलआर को एकीकृत करती है। कोर इंटरफ़ेस जो सीएलआर थ्रेड-पूल चीजों को प्राप्त करने के लिए उपयोग करता है वह IHostThreadPoolManager है। यह एक अप्रबंधित COM इंटरफ़ेस है लेकिन आपको थ्रेडपूल क्लास सदस्यों के साथ लगभग एक-से-एक मैपिंग को पहचानने में कोई दिक्कत नहीं होगी।

सीएलआर होस्ट के कार्यान्वयन हैं। Mscoree.dll द्वारा कार्यान्वित डेस्कटॉप ऐप्स के लिए अधिक पहचानने योग्य वाले डिफ़ॉल्ट सीएलआर होस्ट हैं। विभिन्न विंडोज संस्करणों के लिए इसके विभिन्न संस्करण हैं। और एएसपी.नेट, एसक्यूएल सर्वर, विजुअल स्टूडियो होस्टिंग प्रक्रिया, सिल्वरलाइट, विंडोज फोन, एक्सबॉक्स के लिए कस्टम होस्ट। और कम पहचानने योग्य, बड़े अप्रबंधित ऐप्स एक .NET भाषा में लागू स्क्रिप्टिंग का समर्थन करने के लिए स्वयं सीएलआर होस्ट कर सकते हैं। ऑटोकैड आदि जैसे सीएडी कार्यक्रम मानक उदाहरण हैं।

सीएलआर में धागे की कोर धारणा वर्चुअलाइज्ड है। IClrTask और IClrTaskManager उस के लिए होस्टिंग इंटरफेस हैं। जो एक मेजबान को ऑपरेटिंग सिस्टम थ्रेड की तुलना में किसी अन्य चीज़ पर थ्रेड लागू करने की अनुमति देता है। एक फाइबर की तरह। वास्तव में कोई भी यह बीटीडब्ल्यू नहीं करता है।

निश्चित रूप से, विंडोज के पास थ्रेडपूल के लिए अपना एपीआई है। CreateThreadPool() winapi फ़ंक्शन उस गेंद रोलिंग को प्राप्त करता है। हालांकि, dumpbin.exe/imports के साथ मेरी मशीन पर mscor * .dll फ़ाइलों के चारों ओर पोकिंग, मुझे यह उपयोग नहीं किया जा रहा है। समस्या का कम से कम हिस्सा यह हो सकता है कि CreateThreadPool() बाद में Winapi फ़ंक्शन है, जो Vista के बाद ही उपलब्ध है। एक्सपी और पहले विंडोज संस्करणों का एक बहुत ही सरल कार्यान्वयन था। तो, नहीं, कम से कम .NET 4.5.2 के डेस्कटॉप संस्करण के लिए, Windows थ्रेडपूल प्रासंगिक प्रतीत नहीं होता है।

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