2016-08-20 6 views
8

मुझे आश्चर्य है कि क्या होता है जब एसिंक कॉल के परिणाम को संभालने के लिए कोई आईओ थ्रेड नहीं होता है।क्या होता है यदि एसिंक परिणाम को संभालने के लिए कोई आईओ थ्रेड नहीं है?

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

+0

सामान्य बात यह होती है कि जब आप कंप्यूटर से बहुत सी चीजें करने के लिए कहते हैं तो यह धीमा हो जाता है। यह बहुत गहराई से दफनाया गया है और वास्तव में सीएलआर का हिस्सा नहीं है, [IHostIOCompletionManager इंटरफेस] (https://msdn.microsoft.com/en-us/library/ms164490 (v = vs.110) .aspx) काम पूरा हो जाता है । आप किस मेजबान का उपयोग करते हैं इस पर निर्भर करता है। प्रैक्टिस में यह आमतौर पर यह मानना ​​सुरक्षित है कि * समापनपोर्ट थ्रेड्स * सेटमैक्स थ्रेड्स() को तर्क पूरी तरह अनदेखा कर दिया गया है और समवर्ती * निष्पादन * (लंबित नहीं) की अधिकतम संख्या प्रोसेसर कोर की संख्या के बराबर होती है। –

उत्तर

5

जब तक आप थ्रेड पूल को प्रतिबंधित नहीं करते हैं, तो यह आवश्यकतानुसार नए I/O धागे बनाएगा। सिग्नल एक कतार जैसी संरचना में इंतजार कर रहा है जिसे I/O Completion Port (IOCP) कहा जाता है जब तक इसे पुनर्प्राप्त नहीं किया जाता है; सिग्नल खो नहीं गए हैं।

+0

थ्रेड पूल में आईओ (और कार्यकर्ता) धागे की संख्या के लिए अधिकतम मूल्य है। आपकी कहानियां कि इन संकेतों को संभालने के लिए यह उस मूल्य पर जायेगा? या बस अगर हम अधिकतम नहीं हैं तो एक नया धागा बनाया जाएगा अन्यथा यह आईओसीपी कतार में बैठता है? – shortspider

+1

नहीं, यह सीमा पार करने के लिए नहीं जायेगा, लेकिन जैसा कि सुझाव दिया गया है, यह उसकी बारी के लिए प्रतीक्षा कर देगा और आईओ थ्रेड्स की संख्या में प्रतिबंध होने पर प्रतीक्षा लंबे समय तक बढ़ा दी जाएगी, जिसे बुलाया जा सकता है –

2

जब प्रारंभिक करने के लिए OS का उपयोग करें और concurrency की ज्यादा गुंजाइश नहीं था, फिर अगर आप एक से अधिक आवेदन को खोलने, जो IOExcel, Word, Pdf, Ppt तरह की जरूरत के पहले के समय के लिए वापस जाने, दो, प्रणाली, त्रिशंकु और प्रतिक्रिया-हीन यह बाद दिखाई देगा उन सभी के साथ एक साथ सौदा नहीं कर सकते हैं, लेकिन यदि आप अधिक अनुरोध कतारबद्ध करना बंद कर देते हैं, और सिस्टम क्रैश नहीं होता है, तो आप देखेंगे कि उनमें से सभी को अपना मौका मिलता है और वे फिर से सक्रिय हो जाते हैं।

यह IO requests का एक सामान्य उपयोग केस संसाधित होने की प्रतीक्षा में कतारबद्ध किया गया है, उनमें से कोई भी तब तक खो गया है जब तक सिस्टम क्रैश नहीं होता है, जो आजकल ऐसा नहीं होता है, इसके कार्यान्वयन की मजबूती के कारण, ब्लू को याद रखें मौत की स्क्रीन, जो अभी भी हो सकती है और यही एकमात्र बिंदु है जब आईओ अनुरोध खो जाएंगे।

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

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