2011-04-30 15 views
30

इवेंट-संचालित और एसिंक्रोनस अक्सर समानार्थी के रूप में उपयोग किया जाता है। क्या दोनों के बीच कोई अंतर है?घटना संचालित और असीमित के बीच क्या अंतर है? एपोल और एआईओ के बीच?

इसके अलावा, epoll और aio के बीच क्या अंतर है? वे एक साथ कैसे फिट होते हैं?

आखिरकार, मैंने कई बार पढ़ा है कि लिनक्स में एआईओ बहुत टूटा हुआ है। यह कितना टूटा हुआ है?

धन्यवाद।

+1

धागे की कल्पना करें जो एक घटना-संचालित आर्किटेक्चर का उपयोग करने पर असीमित व्यवहार को स्वतंत्र करने की अनुमति देते हैं। इवेंट-संचालित आर्किटेक्चर अक्सर कार्यक्रम को "एक कंटेनर के भीतर रहने" की अनुमति देते हैं (उदाहरण के लिए एक थ्रेड, एक प्रक्रिया, आदि जो कुछ कार्यों को सरल रख सकता है) लेकिन अन्य "कंटेनर" एसिंक्रोनस तकनीकों को रोकें। –

उत्तर

16

घटनाक्रम एसिंक्रोनस निष्पादन प्राप्त करने के लिए प्रतिमानों में से एक है। लेकिन सभी एसिंक्रोनस सिस्टम घटनाओं का उपयोग नहीं करते हैं। यह इन दोनों के अर्थपूर्ण अर्थ के बारे में है - एक दूसरे की सुपर-इकाई है।

epoll और aio विभिन्न रूपकों का उपयोग करें:

epoll एक अवरुद्ध आपरेशन (epoll_wait()) है - आप धागा ब्लॉक जब तक किसी घटना होता है और फिर आप अपने कोड में विभिन्न प्रक्रियाओं/कार्य/शाखाओं को घटना प्रेषण।

एआईओ में आप सिस्टम में कॉलबैक फ़ंक्शन (समापन दिनचर्या) का पता पास करते हैं और सिस्टम कुछ होने पर आपके फ़ंक्शन को कॉल करता है।

एआईओ के साथ समस्या यह है कि आपका कॉलबैक फ़ंक्शन कोड सिस्टम थ्रेड से चलता है और इसलिए सिस्टम स्टैक के शीर्ष पर होता है। जैसा कि आप कल्पना कर सकते हैं उसके साथ कुछ समस्याएं।

2

इवेंट संचालित एक एकल धागा है जहां एक निश्चित परिदृश्य के लिए ईवेंट पंजीकृत होते हैं। जब उस परिदृश्य का सामना किया जाता है, तो घटनाओं को निकाल दिया जाता है। हालांकि उस समय भी प्रत्येक घटना को अनुक्रमिक तरीके से निकाल दिया जाता है। इसके बारे में असीमित कुछ भी नहीं है। Node.js (webserver) एकाधिक अनुरोधों से निपटने के लिए ईवेंट का उपयोग करता है।

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

17

वे पूरी तरह से अलग चीजें हैं।

घटनाओं से प्रेरित प्रतिमान का अर्थ है कि जब भी कुछ होता है, तो "घटना" नामक एक वस्तु को कार्यक्रम में भेजा जाता है, बिना किसी "कुछ" को नियमित अंतराल में मतदान किया जाना चाहिए ताकि यह पता चल सके कि यह हुआ है या नहीं। यह "घटना" प्रोग्राम द्वारा कुछ क्रियाएं करने के लिए फंस सकती है (यानी "हैंडलर") - या तो सिंक्रोनस या असिंक्रोनस।

इसलिए, घटनाओं का संचालन या तो समकालिक या असीमित हो सकता है। जावास्क्रिप्ट, उदाहरण के लिए, एक तुल्यकालिक घटना प्रणाली का उपयोग करता है।

असिंक्रोनस का अर्थ है कि क्रियाएं वर्तमान "मुख्य" निष्पादन धारा से स्वतंत्र हो सकती हैं। आपको लगता है, यह नहीं का मतलब है "समांतर", या "अलग धागा"। इस दौरान "मुख्य" निष्पादन धारा को अवरुद्ध करते हुए, "असीमित" क्रिया वास्तव में मुख्य धागे पर चल सकती है। तो "बहु-थ्रेडिंग" के साथ "एसिंक्रोनस" को भ्रमित न करें।

आप कह सकते हैं कि, तकनीकी तौर पर, एक अतुल्यकालिक आपरेशन स्वचालित रूप से इवेंट मान लिया गया है - कम से कम "पूरा", "गलती" या "निरस्त/रद्द कर दिया" घटनाओं (इनमें से एक या अधिक) भड़कानेवाला लिए भेजा जाता है ऑपरेशन (या अंतर्निहित ओ/एस स्वयं) का संकेत है कि ऑपरेशन बंद हो गया है। इस प्रकार, async हमेशा घटना संचालित है, लेकिन दूसरे तरीके से दौर नहीं है।

+0

आप कहते हैं- "आपको याद है, इसका मतलब" समांतर "या" अलग धागा "नहीं है।" क्या आप एक उदाहरण के साथ और अधिक समझा सकते हैं। यदि घटना मुख्य धागे के भीतर संभाली जाती है, तो यह वर्तमान मुख्य निष्पादन धारा से कैसे स्वतंत्र है? –

+1

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

+0

हाय स्टीफन, मुझे लगता है कि लिनक्स सिंगल हैंडलर इस परिदृश्य में सह-दिनचर्या का एक उदाहरण है। क्या यह सही है? – firo

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