अन्य भाषाओं में Node.js की इवेंट-संचालित वास्तुकला और बहु-थ्रेडेड प्रोग्रामिंग में क्या अंतर है?


जवाब 1:

ईवेंट-चालित और बहु-थ्रेडेड प्रतिमान दोनों में कोड एक ऑपरेटिंग सिस्टम प्रक्रिया के अंदर चलता है।

जब प्रक्रिया कई थ्रेड्स चलाता है, तो ये थ्रेड्स पढ़ने और लिखने के लिए प्रोसेस मेमोरी (एड्रेस स्पेस) दोनों को साझा करते हैं।

जावास्क्रिप्ट है कि Node.js शक्तियों को डिजाइन द्वारा एकल-पिरोया गया है। प्रत्येक फ़ंक्शन को पूरा करने के लिए चलाने की गारंटी है, और वर्तमान प्रक्रिया में कोई अन्य जावास्क्रिप्ट कोड उस फ़ंक्शन को चलाने के दौरान नहीं चलेगा। स्वाभाविक रूप से अतुल्यकालिक घटनाओं (नेटवर्क, डिस्क इनपुट-आउटपुट, टाइमर, अन्य हार्डवेयर और ऑपरेटिंग सिस्टम ईवेंट) को इंजन द्वारा नियंत्रित किया जाता है जो इन घटनाओं के लिए हैंडलर (या कॉलबैक) के रूप में पंजीकृत जावास्क्रिप्ट फ़ंक्शंस जोड़ता है, जिसके बाद ईवेंट लूप कतार को निष्पादित किया जाना है। कतार के सामने के कार्य समाप्त हो गए हैं।

बहु-थ्रेडेड प्रतिमान में, दो या अधिक थ्रेड्स समानांतर में कोड चलाते हैं, इसलिए फ़ंक्शन के दौरान एक अलग कोड कोड चलाने के साथ-साथ एक अलग प्रोसेसर कोर पर, संभवतः एक ही मेमोरी पतों को पढ़ना या लिखना हो सकता है। यह तब तक मेमोरी की असंगत स्थिति में हो सकता है जब तक कि विशेष ऑपरेटिंग सिस्टम तंत्र (सिंक्रोनाइज़ेशन प्राइमेटिव) का उपयोग कोड द्वारा साझा मेमोरी तक पहुंच का प्रबंधन करने के लिए किया जाता है।



जवाब 2:

यह एक अच्छा सवाल है, "Node.js की इवेंट-संचालित वास्तुकला और अन्य भाषाओं में बहु-थ्रेडेड प्रोग्रामिंग में क्या अंतर है?"

हमें इसे थोड़ा कम करना चाहिए।

  • नोड की घटना संचालित वास्तुकला।

इवेंट संचालित आर्किटेक्चर नोड, उदाहरण के लिए, टॉरनेडो (पायथन), वर्टेक्स (जावा), अक्का (स्काला), रिएक्टिवएक्स (कई भाषाओं) के लिए अनन्य नहीं है।

  • अन्य भाषाओं में मल्टी-थ्रेडेड प्रोग्रामिंग।

ध्यान दें कि जावास्क्रिप्ट, डिजाइन द्वारा, कई थ्रेड्स का समर्थन नहीं करता है। हालांकि यह वेबवर्क का समर्थन करता है, जो, जहां तक ​​मुझे पता है, थ्रेड के रूप में कार्य कर सकता है।

तो ईवेंट-चालित नोड के लिए अद्वितीय नहीं है और नोड में मल्टी-थ्रेडिंग किया जा सकता है।

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

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

इसके अलावा, आपको वास्तव में "कंसिस्टेंसी" के लिए कई मॉडलों के बारे में पढ़ना चाहिए और प्रत्येक के पेशेवरों और विपक्षों को समझना चाहिए। बहु-सूत्रण इतने लंबे समय के लिए स्वीकार्य क्यों था, इसकी सराहना के लिए बोनस अंक।



जवाब 3:

वैचारिक मतभेद आपके सिर को चारों ओर लपेटने के लिए बहुत आसान हैं।

ईवेंट-चालित आर्किटेक्चर में, आपका प्रोग्राम निरंतर एकल थ्रेडेड लूप में चलता है (आप नोड में कुछ मल्टी थ्रेडिंग कर सकते हैं लेकिन अभी उस बारे में चिंता न करें)। जब कोई घटना घटती है, तो अवकाश के कार्यक्रमों से निबटने के लिए कॉल स्टैक पर एक नौकरी की जाती है।

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

ये दोनों तरीके अलग-अलग चीजों के लिए बहुत उपयोगी हैं। इवेंट संचालित उपयोगकर्ता इंटरफ़ेस और सर्वर के लिए बहुत अच्छा है क्योंकि आपके प्रोग्राम को पता नहीं है कि एक नया भी कब होगा और अक्सर ईवेंट फटने की स्थिति में आएंगे। जबकि कम्प्यूटेशनल रूप से भारी नौकरियों के लिए थ्रेडिंग आवश्यक है जहां आप एक समस्या को बहुत छोटे टुकड़ों में तोड़ना चाहते हैं (या आप अपने एकल थ्रेडेड लूप की सीमा तक पहुंच रहे हैं)।