windows सबसे अच्छा एपोल/क्यूयूयूई/विंडोज पर चयन करें क्या है?




io notifications (4)

चयन करें () फ़ंक्शन POSIX और "winsock.h" या "winsock2.h" सहित विंडो पर उपयोगी है।

विंडोज सर्वश्रेष्ठ आई / ओ इवेंट नोटिफिकेशन सुविधा क्या है?

सबसे अच्छे से मुझे कुछ मतलब है ...

  1. इनपुट फ़ाइल डिस्क्रिप्टर की संख्या पर कोई सीमा नहीं है
  2. सभी फाइल डिस्क्रिप्टर (डिस्क फ़ाइलें, सॉकेट, ...) पर काम करता है
  3. विभिन्न अधिसूचना मोड प्रदान करता है (बढ़त ट्रिगर, सीमा ट्रिगर)

विंडोज में, एएसआईएनसी ऑपरेशन फ़ाइल ऑपरेशन द्वारा किया जाता है, डिस्क्रिप्टर द्वारा नहीं। एसिंक्रोनस को पूरा करने के लिए फ़ाइल ऑपरेशन पर प्रतीक्षा करने के कई तरीके हैं

उदाहरण के लिए, यदि आप जानना चाहते हैं कि डेटा सॉकेट पर डेटा कब उपलब्ध है, सॉकेट पर एक async पढ़ें अनुरोध जारी करें और यह पूरा होने पर, डेटा उपलब्ध था और पुनर्प्राप्त किया गया था।

Win32 में, एएसआईएनसी ऑपरेशन OVERLAPPED संरचना का प्रयोग करते हैं जिसमें बकाया IO ऑपरेशन के बारे में स्थिति शामिल होती है।

  1. IO समापन पोर्ट के साथ फ़ाइलें संबद्ध करें और async IO अनुरोध प्रेषित करें। जब कोई ऑपरेशन पूरा हो जाता है, तो वह उस कतार पर एक पूरा संदेश देगा जो आपके कार्यकर्ता थ्रेड (पर) प्रतीक्षा कर सकते हैं और पहुंचते समय पुनः प्राप्त कर सकते हैं। आप उपयोगकर्ता परिभाषित संदेशों को कतार में भी डाल सकते हैं। पूर्णतया पोर्ट के साथ कितनी फाइल या कतारबद्ध संदेशों का उपयोग किया जा सकता है इसकी कोई सीमा नहीं है
  2. एक घटना के साथ प्रत्येक आईओ ऑपरेशन डिस्पैच करें। एक ऑपरेशन से जुड़े ईवेंट सिग्नल हो जाएगा (प्रतीक्षा की पूर्ति) जब यह पूरा हो जाएगा। एक बार में सभी घटनाओं पर प्रतीक्षा करने के लिए WaitForMultipleObjects का उपयोग करें इसका केवल एक ही बार MAXIMUM_WAIT_OBJECTS ऑब्जेक्ट पर प्रतीक्षा करने में सक्षम होने का नुकसान है (64)। आप एक ही समय में अन्य प्रकार की इवेंट्स पर भी प्रतीक्षा कर सकते हैं (प्रक्रिया / धागा समाप्ति, म्यूटक्स, इवेंट, सेमाफोर)
  3. एक थ्रेड पूल का उपयोग करें थ्रेड पूल प्रत्येक असीमित संख्या में ऑब्जेक्ट और फ़ाइल ऑपरेशन को पूरा करने के लिए प्रतीक्षा कर सकता है और पूरा होने पर उपयोगकर्ता परिभाषित फ़ंक्शन को निष्पादित कर सकता है।
  4. कॉल करने के लिए अतुल्यकालिक प्रक्रिया कॉल (एपीसी) को SleepEx लिए ReadFileEx और WriteFileEx का उपयोग करें, जब प्रत्येक कार्यवाही के लिए अधिसूचना संदेश प्राप्त करने के लिए Alertable TRUE साथ कॉलिंग थ्रेड और SleepEx (या WaitFor{Single|Multiple}ObjectsEx ) को पूरा करें। यह विधि IO पूरा करने वाला पोर्ट के समान है, लेकिन केवल एक थ्रेड के लिए काम करता है।

विंडोज एनटी कर्नेल आंतरिक रूप से गर्तिका, डिस्क फ़ाइल, पाइप, आदि फ़ाइल संचालन के बीच अंतर नहीं रखता है: इन सभी विकल्प सभी फ़ाइल प्रकारों के साथ काम करेंगे।


अभी तक एक नहीं है, जहां तक ​​मुझे जानकारी है एक दोस्त और मैं एक ओपन सोर्स विंडोज एपोल कार्यान्वयन (नीचे दिए गए लिंक) पर काम कर रहा हूं, लेकिन हम यह समझाने वाले मुद्दों में चल रहे हैं कि यह कैसे लिनक्स कार्यान्वयन के रूप में कार्य करता है।

वर्तमान बाधाएं:

  • लिनक्स में, फ़ाइल डिस्क्रिप्टर और सॉकेट डिस्क्रिप्टर्स विनिमेय हैं, लेकिन विंडोज में वे नहीं हैं। दोनों एक epoll कार्यान्वयन के साथ संगत होना चाहिए
  • विंडोज में कर्नेल घटनाओं को प्राप्त करने में काफी मुश्किल है ... जो कि लिपि में एपोल काम करता है। हम यह अनुमान लगा रहे हैं कि हमारे क्रॉस-प्लेटफॉर्म एपोल लाइब्रेरी का उपयोग करते हुए एक प्रोग्राम लिनक्स की तुलना में विंडोज में काफी धीमी गति से चलेंगे।

मैं इस परियोजना के साथ प्रगति करने के बाद इस पोस्ट को वापस लाने और अपडेट करने का प्रयास करूंगा।

http://sourceforge.net/projects/cpoll


libuv

libuv यूनिक्स और विंडोज के लिए I / O का आयोजन करता है और सॉकेट, फाइल और पाइप के लिए समर्थन करता है। यह नोड के मंच परत है।

अधिक जानकारी यहां दी गई है: http://nikhilm.github.io/uvbook/introduction.html





epoll