10

मैं नोड.जेएस में देख रहा हूं और सभी दस्तावेज और ब्लॉग इस बात के बारे में बात करते हैं कि यह प्रति-अनुरोध मॉडल की बजाय ईवेंट-लूप का उपयोग कैसे करता है।इवेंट-लूप क्या है और यह अन्य मॉडलों का उपयोग करने से अलग कैसे है?

मुझे अंतर को समझने में कुछ भ्रम है। मुझे लगता है कि मैं इसे समझने में 80% हूं लेकिन अभी तक इसे पूरी तरह से प्राप्त नहीं कर रहा हूं।

+0

शायद आप जो समझ नहीं रहे हैं उसके बारे में थोड़ा और विशिष्ट हो? – igorw

उत्तर

17

एक थ्रेडेड मॉडल प्रत्येक अनुरोध के लिए एक नया धागा पैदा करेगा। इसका मतलब है कि आप गणना और स्मृति के मामले में काफी कुछ ओवरहेड प्राप्त करते हैं। एक इवेंट लूप एक थ्रेड में चलता है, जिसका मतलब है कि आपको ओवरहेड नहीं मिलता है।

इसका नतीजा यह है कि आपको अपना प्रोग्रामिंग मॉडल बदलना होगा। क्योंकि ये सभी अलग-अलग चीजें एक ही धागे में हो रही हैं, आप ब्लॉक नहीं कर सकते हैं। इसका मतलब है कि आप कुछ होने की प्रतीक्षा नहीं कर सकते क्योंकि इससे पूरे धागे को अवरुद्ध कर दिया जाएगा। इसके बजाय आप कॉलबैक को परिभाषित करते हैं जिसे क्रिया पूर्ण होने के बाद बुलाया जाता है। इसे आमतौर पर गैर-अवरुद्ध I/O के रूप में जाना जाता है।

छद्म अवरुद्ध I/O के लिए उदाहरण:

row = db_query('SELECT * FROM some_table'); 
print(row); 

छद्म गैर अवरुद्ध I/O के लिए उदाहरण:

db_query('SELECT * FROM some_table', function (row) { 
    print(row); 
}); 

इस उदाहरण का उपयोग करता है lambdas (अनाम प्रक्रियाएं) की तरह वे जावास्क्रिप्ट में किया जाता है पुरे समय। जेएस घटनाओं का भारी उपयोग करता है, और यही वही है जो कॉलबैक के बारे में हैं। एक बार कार्रवाई पूरी होने के बाद, एक ईवेंट निकाल दिया जाता है जो कॉलबैक को ट्रिगर करता है। यही कारण है कि इसे अक्सर घटना मॉडल या असीमित मॉडल के रूप में जाना जाता है।

इस मॉडल का कार्यान्वयन एक लूप का उपयोग करता है जो इन घटनाओं को संसाधित करता है और आग लगा देता है। यही कारण है कि इसे ईवेंट कतार या ईवेंट लूप कहा जाता है।

घटना कतार चौखटे के प्रमुख उदाहरण में शामिल हैं:

  • EventMachine (रूबी)
  • Tornado (अजगर)
  • node.js (वी 8 सर्वर साइड जावास्क्रिप्ट)
+2

मुझे लगता है कि यह एक महत्वपूर्ण कतार है कि एक घटना कतार थ्रेड पूल की अनुपस्थिति का संकेत नहीं देती है। उदाहरण के लिए, नोड.जेएस आंतरिक रूप से संचालन को अवरुद्ध करने के लिए थ्रेड पूल का भारी उपयोग करता है। घटना कतार मॉडल कैंजेस इस तरह के लंबे समय से चलने वाले कार्यों के साथ कैसे बातचीत करें। –

6

इनकमिंग अनुरोधों या कॉलबैक को घटनाओं के रूप में सोचें, जो कि संसाधित और संसाधित होते हैं।

यह वही है जो अधिकांश जीयूआई सिस्टम में किया जाता है। सिस्टम तब नहीं जान सकता जब कोई उपयोगकर्ता बटन पर क्लिक करेगा या कुछ बातचीत करेगा। लेकिन जब वह करता है, तो ईवेंट इवेंट लूप पर प्रचारित होगा, जो मूल रूप से एक लूप है जो कतार में नई घटनाओं की जांच करता है और उन्हें संसाधित करता है।

लाभ यह है कि आपको अपने लिए परिणामों की प्रतीक्षा करने की आवश्यकता नहीं है। इसके बजाए, आप कॉलबैक फ़ंक्शंस पंजीकृत करते हैं जिन्हें ईवेंट ट्रिगर होने पर निष्पादित किया जाता है। यह ढांचे को I/O सामग्री को संभालने की अनुमति देता है और आप स्वयं द्वारा प्रक्रियाओं को अवरुद्ध करने के बजाय लंबे समय से चलने वाले कार्यों से निपटने पर आसानी से इसकी आंतरिक दक्षता पर भरोसा कर सकते हैं।

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

+0

"प्रक्रियाएं जो बाहरी रूप से सामग्री निष्पादित करती हैं और आखिरकार घटनाओं का प्रचार करती हैं हालांकि कई धागे/प्रक्रियाओं में वितरित की जा सकती हैं।" क्या यह वेनिला जेएस इंजन (यानी नोड नहीं) के लिए भी सच है? क्योंकि मैं खुद को एक ही चीज़ सोच रहा हूं ... घटना प्रसार और बाहरी अनुरोधों को अलग-अलग धागे से संभाला जाना चाहिए, भले ही थ्रेड जो वास्तविक जेएस कोड निष्पादित करता है केवल एक ही है। लेकिन जो कुछ भी मैंने पढ़ा है वह भी कहता है कि जेएस ** इंजन ** एकल-थ्रेडेड है जो मेरे लिए अविश्वसनीय लगता है। – The111

0

एक evented पाश की अनुमति देता है हार्ड ड्राइव या नेटवर्क से बात करने में लगने वाले समय को संभालने के लिए। समय की इस सूची को लें:

Source | CPU Cycles 
L1  | 3 Cycles 
L2  | 14 Cycles 
RAM | 250 Cycles 
Disk | 41,000,000 Cycles 
Network| 240,000,000 Cycles 

उस समय आप PHP में कर्ल चला रहे हैं बस सीपीयू को बर्बाद कर रहा है।

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

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