2010-03-05 13 views
8

एक प्रतिनिधि का उपयोग करके मैं किसी भी कार्य को असीमित रूप से कॉल कर सकता हूं। प्रलेखन से मैं समझता हूं कि यह थ्रेडपूल के लिए वर्कटाइम कतार में किया जाता है।एसिंक्रोनस कॉल और एसिंक्रोनस आईओ कॉल के बीच अंतर .net

कोई भी आईओ कार्यों (जैसे सॉकेट, फाइल, वेबपृष्ठ आदि से पढ़ने) के लिए असीमित कॉल कर सकता है। मुझे लगता है (लेकिन मुझे यकीन नहीं है) यह थ्रेडपूल में वर्कटाइम नहीं पैदा करता है। परिणाम प्राप्त होने के बाद ही (या एक त्रुटि), थ्रेडपूल में एक नए धागे से कॉल किया गया कॉलबैक है।

क्या यह धारणा सही है? या एक एसिंक्रोनस आईओ कॉल है, कवर के तहत भी कुछ थ्रेड जो पैदा हुआ है? यदि यह मामला है, तो एसिंक्रोनस कॉल कैसे स्प्रेडिंग थ्रेड (थ्रेडपूल का उपयोग करके) से बेहतर प्रदर्शन कर सकते हैं और ब्लॉक कर सकते हैं?

भी: किसी भी समय कितने एसिंक्रोनस कॉल का सामना किया जा सकता है? थ्रेडपूल का इस्तेमाल होने के मामले में, मुझे लगता है कि आप जितना चाहें उतना अनुमान लगाते हैं। लेकिन आईओ एसिंक्रोनस कॉल के मामले में, क्या कोई सीमा है? और ऐसा है, आप कैसे जानते हैं कि सीमा क्या है?

उत्तर

7

असिंक्रोनस आईओ थ्रेड पूल से दूसरे धागे का उपयोग करने की तुलना में कहीं अधिक जटिल चीज है।

1 एक युक्ति गिरी वस्तु

एक ही उपकरण के खिलाफ एकाधिक मैं/हे अनुरोधों के प्रदर्शन के लिए उपयोगी नहीं है संकेतन:

कई विभिन्न तकनीकों ओएस अंदर, कि समर्थन अतुल्यकालिक आईओ रहे हैं। एक थ्रेड को I/O अनुरोध जारी करने और इसे संसाधित करने के लिए एक अन्य थ्रेड जारी करने देता है।

2 एक घटना गिरी वस्तु संकेतन

की अनुमति देता है एक ही उपकरण के खिलाफ एकाधिक मैं/हे अनुरोधों। एक थ्रेड को I/O अनुरोध जारी करने और इसे संसाधित करने के लिए एक अन्य थ्रेड जारी करने देता है।

3 का उपयोग करते हुए alertable आई/ओ

की अनुमति देता है एक ही उपकरण के खिलाफ एकाधिक मैं/हे अनुरोधों। थ्रेड जो I/O अनुरोध जारी करता है उसे भी संसाधित करना चाहिए।

4 का उपयोग करते हुए I/O पूर्णता बंदरगाहों

एक ही उपकरण के खिलाफ एकाधिक मैं/हे अनुरोध देता है। एक थ्रेड को I/O अनुरोध जारी करने और इसे संसाधित करने के लिए एक अन्य थ्रेड जारी करने देता है। यह तकनीक अत्यधिक स्केलेबल है और इसमें सबसे अधिक लचीलापन है।

+0

@ सेर्गे: तो आप कह रहे हैं कि वास्तव में एक अंतर है। फिर कितने आईओ अनुरोध किसी भी समय कमान लंबित हो सकते हैं? मिठाई क्या है? क्या यह आईओ लक्ष्यित या कुछ और पर निर्भर है? एक कैसे जान सकता है? – Toad

+0

सरल उत्तर: यह निर्भर करता है। यदि आप आईओ प्राप्ति बंदरगाहों का उपयोग करते हैं (यह सबसे जटिल लेकिन सबसे शक्तिशाली तकनीक है) ओएस सभी सक्रिय आईओ कार्यों को संभालने के लिए जितना संभव हो उतना धागा बना देगा (आपके हार्डवेयर कॉन्फ़िगरेशन पर निर्भर करता है)। सतर्क IO का उपयोग करने के लिए एक धागा की आवश्यकता है! हर! लंबित आईओ संचालन। यही कारण है कि आईओ कोप्लेक्शन बंदरगाह अधिक प्रभावी और स्केलेबल है: आप संभाल सकते हैं! कई! कम से कम संसाधनों के साथ एक साथ आईओ अनुरोध। मुझे लगता है कि आपको ये सब समझने के लिए जेफरी रिचटर द्वारा "सी/सी ++ के माध्यम से विंडोज़" या "प्रोग्रामिंग सर्वर-साइड एप्लिकेशन" पढ़ना चाहिए। यह बहुत मुश्किल चीजें है! –

+0

@reinier सीमाएं आपके सीपीयू से आपकी विंडोज लाइसेंस कुंजी पर सब कुछ पर आधारित हैं। लेकिन सीमाएं महत्वपूर्ण नहीं हैं - जब तक आप बीसीएल द्वारा प्रदान की गई एसिंक्रोनस विधियों का उपयोग करते हैं, तब तक आप जानते हैं कि यदि आप उदाहरण के मुकाबले बेहतर स्केलेबिलिटी प्राप्त करेंगे। 'QueueUserWorkItem'। – bzlm

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