2015-02-22 5 views
6

मुझे लगता है कि ओवरलैप्ड I/O का उपयोग करने के तरीके पर ट्यूटोरियल है, लेकिन मुझे नहीं पता कि इसे ऐसा क्यों कहा जाता है।इसे ओवरलैप्ड I/O क्यों कहा जाता है?

क्या ऐसा इसलिए है क्योंकि उदाहरण के लिए मैं सॉकेट से कुछ पढ़ सकता हूं, और फिर पहले पढ़ने से बाइट पढ़ने के पहले कुछ और पढ़ा जाता है?

+2

हर कोई यह "एसिंक्रोनस I/O" कहता है। – rightfold

+0

ठीक है, आप एक पठन अनुरोध जारी कर सकते हैं, (या एक ही, या अलग, सॉकेट के लिए एकाधिक पढ़ने के अनुरोध)। वास्तविक पढ़ने आपके लिए किया जाएगा और आपको पूरा होने पर अधिसूचित किया जाएगा। –

+0

ऐसा इसलिए है क्योंकि आप एक ही समय में एकाधिक I/O संचालन कर सकते हैं, यानी, वे एक दूसरे को ओवरलैप करते हैं। –

उत्तर

5

मुझे लगता है कि विचार (20 साल पहले) था कि आप आईओ शुरू कर सकते हैं, कुछ गणना या अन्य काम कर सकते हैं और बाद में परिणाम की प्रतीक्षा कर सकते हैं। यह शायद ही कभी किया जाता है। मुझे लगता है कि यह विचार उस समय से आता है जहां select और poll कला की अवस्था माना जाता था।

एक बेहतर नाम असीमित आईओ होगा। ऐसा लगता है कि हर दूसरे प्लेटफॉर्म इसे कॉल करता है। In fact the MSDN documentation mixes the two terms.

+0

विंडोज "एसिंक्रोनस आई/ओ" वाक्यांश का भी उपयोग करता है, उदाहरण के लिए, https://msdn.microsoft.com/en-us/library/windows/desktop/aa365683%28v=vs.85%29.aspx –

+0

@usr आज कला की वर्तमान स्थिति क्या है? क्या आप कह रहे हैं कि 'चयन' और 'मतदान' बहिष्कृत हैं? – Rich

+0

@Rich उन्हें आधिकारिक तौर पर बहिष्कृत नहीं किया गया है, लेकिन परिणामी प्रोग्रामिंग मॉडल में लचीलापन, कोड गुणवत्ता, स्केलेबिलिटी और पूर्ण प्रदर्शन के साथ समस्याएं हैं। एपोल या क्यूक्यू का प्रयोग लाइब्रेरी के साथ मुश्किल नहीं है। यह नहीं देख सकता कि क्यों एक सूचित व्यक्ति उस मार्ग को चुनिंदा/चुनाव पर नहीं उठाएगा। और फिर आपके पास अभी भी एसिंक आईओ पर धागे का उपयोग करने का विकल्प है जो एक अधिक जटिल व्यापार-बंद है। – usr

1

माइक्रोसॉफ्ट विंडोज में ओवरलैप आपरेशन बाकी सब ओएस-भाषा में asynchron के रूप में और कुछ नहीं होता है।

अपने उदाहरण के साथ चिपकने के लिए, आप सॉकेट पर पढ़ना शुरू करते हैं और सफलता की प्रतीक्षा नहीं करते हैं लेकिन कुछ पूरी तरह से अलग करते हैं (शायद एक अलग (!) सॉकेट पर पढ़ें)। फिर पूछें कि पहला ऑपरेशन समाप्त हो गया है या नहीं। आप इसके लिए इवेंट-हैंडल भी सेट कर सकते हैं। या CALLBACK फ़ंक्शन दें जिसे पूरा होने पर कहा जाता है। उस स्थिति में, पहला कॉल आपके शेष परिचालनों को "ओवरलैप" करता है।

wikipedia पर भी देखें।

मेरा अनुमान है कि क्यों माइक्रोसॉफ्ट इसे ओवरलैप्ड कर रहा था (यह) थ्रेड शुरू करने की तरह नहीं है, एक समय में एसिंक कार्य शुरू करने की तरह, इसके लिए कोई मानक नाम नहीं था। यह std::thread से std::async की तरह है।

+0

'कुछ पूरी तरह से अलग करें', ठीक है, यदि आप चाहें तो आप वही काम कर सकते हैं। किसी भी पूर्णता अधिसूचनाओं को संभालने से पहले आप एक ही, या अलग, सॉकेट/एस के खिलाफ एकाधिक पठन अनुरोध जारी कर सकते हैं। –

5

क्लासिक अर्थ 1 9 60 के दशक (या ईलियर) की तारीख है, जहां ओवरलैप किया गया I/O का मतलब है कि एकाधिक I/O स्थानान्तरण (आमतौर पर प्रत्येक I/O एक अलग डिवाइस पर) एक ही समय में हो सकता है (जैसे समवर्ती पढ़ता है टेप से और डिस्क पर लिखते हैं)। इसके लिए एक वैकल्पिक क्लासिक नाम समवर्ती I/O था।

Overlapped I/O - IBM

: इस बीच में आता है और/या हार्डवेयर डीएमए के लिए इसी तरह के माध्यम से पूरा किया जा सकता आईबीएम मेनफ्रेम के लिए

उदाहरण लेख (उन दिनों में, डीएमए हार्डवेयर कार्यान्वयन के कुछ छोटे प्रोसेसर का एक सेट की तरह अधिक थे)

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