इसमें .NET में कार्यकर्ता की विस्तृत लेकिन सरल विवरण और मैं/हे धागे को खोजने के लिए बहुत मुश्किल हैकार्यकर्ता की सरल वर्णन और मैं/हे धागे
क्या मेरे लिए स्पष्ट इस विषय के बारे में (है, लेकिन नहीं हो सकता है तकनीकी रूप से सटीक):
- कार्यकर्ता धागे धागे हैं कि चाहिए अपने काम के लिए काम सीपीयू;
- आई/ओ धागे (जिसे "समापन बंदरगाह धागे" भी कहा जाता है) उनके काम के लिए डिवाइस ड्राइवरों को नियोजित करना चाहिए और अनिवार्य रूप से "कुछ भी नहीं", केवल गैर-सीपीयू संचालन को पूरा करने की निगरानी करें।
क्या स्पष्ट नहीं है:
- हालांकि विधि ThreadPool.GetAvailableThreads दोनों प्रकार के उपलब्ध थ्रेड की संख्या देता है, ऐसा लगता है मैं/हे धागा के लिए काम करते शेड्यूल करने के लिए कोई सार्वजनिक एपीआई है। आप मैन्युअल रूप से .NET में वर्कर थ्रेड बना सकते हैं?
- ऐसा लगता है कि एकल I/O थ्रेड एकाधिक I/O संचालन की निगरानी कर सकता है। क्या यह सच है? यदि हां, तो क्यों थ्रेडपूल में डिफ़ॉल्ट रूप से इतने सारे उपलब्ध I/O थ्रेड हैं?
- कुछ ग्रंथों में मैंने कॉलबैक पढ़ा, आई/ओ ऑपरेशन पूरा होने के बाद आई/ओ थ्रेड द्वारा ट्रिगर किया गया। क्या यह सच है? क्या यह कार्यकर्ता धागे के लिए कोई काम नहीं है, क्योंकि यह कॉलबैक सीपीयू ऑपरेशन है?
- अधिक विशिष्ट होने के लिए - एएसपी.NET एसिंक्रोनस पेज उपयोगकर्ता I/O धागे करें? कार्यकर्ता धागे की अधिकतम संख्या बढ़ाने के बजाय थ्रेड को अलग करने के लिए I/O कार्य को स्विच करने में प्रदर्शन लाभ वास्तव में क्या है? क्या ऐसा इसलिए है क्योंकि एकल I/O थ्रेड एकाधिक परिचालनों की निगरानी करता है? या I/O धागे का उपयोग करते समय विंडोज अधिक कुशल संदर्भ स्विचिंग करता है?
तो कुछ एपीआई, जो एपीएम पैटर्न (उदाहरण के लिए - WebRequest) का पर्दाफाश, उपयोग ThreadPool.BindHandle विधि आंतरिक रूप से। BeginXXX विधि उपयोगकर्ता कॉलबैक प्रतिनिधि को ले जाएगा, कुछ डिवाइस ड्राइवर को काम देगी और थ्रेडपूल I/O थ्रेड को पूरा करने के लिए बाहरी डिवाइस के काम को पूरा करने के लिए पूरा करने के लिए "प्रतीक्षा" करने के लिए आरक्षित करें। जब अधिसूचना प्राप्त होती है, I/O थ्रेड उठता है और उपयोगकर्ता कॉलबैक प्रतिनिधि कोड चलाता है (जो पूल में I/O थ्रेड को तुरंत वापस करने के लिए तेज़ होना चाहिए)। – Konstantin
तो कार्यकर्ता थ्रेड आमतौर पर उपयोगकर्ता कोड द्वारा निर्धारित कार्य चलाते हैं। और I/O थ्रेड आमतौर पर फ्रेमवर्क कोड द्वारा निर्धारित कार्य चलाते हैं, जो बाहरी उपकरणों के साथ इंटरैक्ट करता है और अपने काम को पूरा करने के लिए इंतजार करने की आवश्यकता होती है और उपयोगकर्ता कॉलबैक तर्क चलाती है, जब यह "बाहरी" काम पूरा हो जाता है। क्या यह सब सही समझ है? – Konstantin
लगभग, लेकिन कैसे ओएस शेड्यूल वास्तविक I/O सीएलआर के लिए अपारदर्शी है। सीएलआर के आई/ओ धागे पूरा होने के लिए इंतजार नहीं कर रहे हैं; बल्कि ओएस ओ/ओ पूर्णता पोर्ट के माध्यम से सीएलआर को अलर्ट करता है जब काम पूरा हो जाता है। – alexdej