मैं चीजों, अतुल्यकालिक मैं समझता हूँ के रूप में/ओ नहीं गैर अवरुद्ध I/O के रूप में काफी एक ही है।
के मामले में गैर-अवरुद्ध I/सेटअप हे, एक बार एक फ़ाइल की जानकारी देता है होना करने के लिए "गैर अवरुद्ध", एक read()
सिस्टम कॉल (उदाहरण के लिए) EWOULDBLOCK
(या EAGAIN
) वापस आ जाएगी अगर पढ़ा आपरेशन को ब्लॉक कर देगा ऑपरेशन को पूरा करने के लिए कॉलिंग प्रक्रिया। सिस्टम select()
, poll()
, epoll()
इत्यादि को प्रदान किया जाता है ताकि प्रक्रिया ओएस से कहा जा सके कि एक या अधिक फ़ाइल डिस्क्रिप्टर उपलब्ध हैं कुछ I/O ऑपरेशन करने के लिए।
अतुल्यकालिक मैं/हे फ़ाइल वर्णनकर्ता के लिए आई/ओ के लिए एक अनुरोध कतार द्वारा संचालित होता है, फोन करने की प्रक्रिया के स्वतंत्र रूप से ट्रैक। फ़ाइल डिस्क्रिप्टर जो एसिंक्रोनस I/O (कच्चे डिस्क देवताओं को आम तौर पर) का समर्थन करता है, एक प्रक्रिया aio_read()
(उदाहरण के लिए) को कॉल करने के लिए फ़ाइल डिस्क्रिप्टर से कई बाइट्स को पढ़ने का अनुरोध करने के लिए कॉल कर सकती है। सिस्टम कॉल तुरंत लौटाता है, चाहे I/O पूरा हो गया हो या नहीं। कुछ समय बाद, प्रक्रिया I/O (यानी, बफर डेटा से भरा हुआ है) पूरा करने के लिए के लिए ऑपरेटिंग सिस्टम का चुनाव करती है।
एक प्रक्रिया (सिंगल-थ्रेडेड) जो केवल गैर-अवरुद्ध I/O निष्पादित करती है, वह एक फ़ाइल डिस्क्रिप्टर से पढ़ने या लिखने में सक्षम होगी जो I/O के लिए तैयार है जब कोई अन्य तैयार नहीं होता है। लेकिन प्रक्रिया को अभी भी सभी तैयार फ़ाइल डिस्क्रिप्टरों को I/O करने के लिए सिस्टम कॉल को सिंक्रनाइज़ करना जारी रखना चाहिए। जबकि, एसिंक्रोनस I/O मामले में, प्रक्रिया केवल I/O (डेटा से भरे बफर) को पूरा करने की जांच कर रही है। एसिंक्रोनस I/O के साथ, ओएस को आई/ओ की सेवा करने के लिए यथासंभव समानांतर में काम करने की आजादी है, अगर यह चुनता है।
इसी के साथ
, वहाँ POSIX aio_read के लिए किसी भी रैपर हैं/अजगर के लिए आदि सिस्टम कॉल बारे में?
स्रोत
2009-06-11 21:19:29
दुःख की बात है O_NONBLOCK (जो क्या fdesc एपीआई आप लिंक वास्तव में करता है) के साथ काम नहीं करता है स्थानीय हार्ड डिस्क फाइलें। यानी, पॉज़िक्स स्पेक का कहना है कि इसे अनदेखा किया जाना चाहिए और मुझे पता है कि प्रत्येक यूनिक्स सिस्टम पर इसे कड़ाई से अनदेखा किया गया है। यदि आपको लगता है कि यह एक बेवकूफ विचार है, तो मैं अधिक सहमत नहीं हो सकता था, लेकिन ऐसा कई ऐतिहासिक और कार्यान्वयन कारण हैं। संक्षेप में, यदि आप स्थानीय हार्ड डिस्क फ़ाइलों के लिए एसिंक्रोनस आईओ चाहते हैं, तो आप बेहतर थ्रेड का उपयोग करते हैं और आईओ थ्रेड में आईओ को स्थगित करते हैं या एआईओ एपीआई का उपयोग करते हैं। – mathieu