सिंगल थ्रेडेड होने के बावजूद, node.js कैसे तेज़ है? मैंने आंकड़े खोजने के लिए कोई परीक्षण नहीं किया है, लेकिन node.js मंचों में खुदाई करते समय, मुझे लगता है कि हर कोई कहता है कि यह तेज़ और अधिक हल्का है। कोई फर्क नहीं पड़ता कि यह कितना हल्का वजन है, एक थ्रेडेड सर्वर बहु थ्रेड वाले से तेज कैसे हो सकता है?जब यह सिंगल थ्रेडेड होता है तो node.js तेज़ क्यों होता है?
उत्तर
सबसे पहले, बहु-थ्रेडेड होने पर प्रोग्राम तेज क्यों होता है?
यह आंशिक रूप से इस तथ्य के कारण है कि बहु-थ्रेडेड प्रोग्राम एकाधिक कोर पर चल सकता है लेकिन मुख्य कारण यह है कि जब तक कोई थ्रेड कुछ आईओ ऑपरेशन (जो अक्सर होता है, विशेष रूप से सर्वर में)), अन्य धागे अभी भी प्रगति कर सकते हैं।
अब, नोड के बारे में क्या?
नोड एकल धागा नहीं है। जेएस में उपयोगकर्ता स्क्रिप्ट को एक थ्रेड में निष्पादित किया जाता है लेकिन सभी आईओ ऑपरेशंस को इंजन और ओएस द्वारा नियंत्रित किया जाता है जो मल्टी-थ्रेडेड हैं।
अभ्यास में, इसका मतलब है कि कई अनुरोध समानांतर में संभाले जाते हैं।
user script | node + OS "threads" (libuv)
-------------------------------------------------------------
receive and analyze request 1 |
ask node for file 1 | fetching file 1
receive and analyze request 2 | fetching file 1
ask node for file 2 | fetching file 1, fetching file 2
prepare response header 1 | fetching file 2
tell node to send file 1 | send file 1, fetching file 2
prepare response header 2 | send file 1
tell node to send file 2 | send file 1, send file 2
नोड (और io.js) के पूरे वास्तुकला यह आसान समानांतरवाद के एक उच्च स्तर के लिए बनाता है: इनमें से कुछ कदम के संभावित अनुक्रम का एक बहुत (बहुत) सरलीकृत उदाहरण है। यूजर थ्रेड केवल इवेंट लूप द्वारा बहुत छोटे कार्यों के लिए बुलाया जाता है जो अगले आईओ ऑपरेशन (ठीक है, वास्तव में केवल आईओ नहीं, लेकिन अक्सर) पर रोकता है जब आपका कोड कॉलबैक नोड करने के लिए देता है जिसे ऑपरेशन समाप्त होने पर बुलाया जाएगा।
बेशक यह केवल तब काम करता है जब आप नोड के असीमित कार्यों का उपयोग कर रहे हों। जब भी आप writeFileSync जैसे "सिंक" में समाप्त होने वाले फ़ंक्शन का उपयोग करते हैं, तो आप समांतरता को हरा रहे हैं।
यह भी पढ़ें [StrongLoop: क्यों जावा से नोड तेजी से बनाता है] (https: // strongloop।com/strongblog/node-js-is-fast-than-java /) –
आपकी स्पष्टीकरण और लिंक के लिए @ डेनिस धन्यवाद। यह मदद करता है। –
Node.js एकल थ्रेड नहीं है: https://nodejs.org/about/ देखें:
किसी भी कनेक्शन समवर्ती
संभाला जा सकता है वास्तव में, यह प्रणाली धागे का उपयोग नहीं करता, लेकिन इसके बजाय साथ वी 8 इंजन का उपयोग करता है libuv लाइब्रेरी बहु-थ्रेडिंग एसिंक्रोनस कॉलबैक के माध्यम से।
इसके अलावा, आप अंत में के माध्यम से child_process.fork
अतिरिक्त बच्चे की प्रक्रिया का उपयोग कर सकते हैं, इस प्रतिक्रिया या इंजन के समग्र गति की किसी भी तरह से हालत गति में नहीं है। मल्टी-थ्रेडिंग स्केलेबिलिटी के लिए यहां है।
- 1. जब जावा प्रोग्राम शुरू होता है तो क्या होता है?
- 2. यह टूलस्ट्रिपमेनूइटम के साथ क्यों होता है?
- 3. जब लिंक में पाउंड "#" साइन होता है तो यह
- 4. जब document.readystate == पूरा होता है तो वही होता है जब अधिभार आग लगती है?
- 5. यह डेटाबेस कनेक्शन विफल क्यों होता है जब "अनुप्रयोग नाम = अनुप्रयोग" कनेक्शन स्ट्रिंग में होता है?
- 6. स्क्रॉलव्यू स्वाइप नहीं होता है जब यह
- 7. Node.js में सिंगल थ्रेडेड और इवेंट लूप
- 8. यह हास्केल फ़िल्टर क्यों समाप्त होता है?
- 9. जब तर्क एक सरणी है तो सी ++ कैसे शुरू होता है और समाप्त होता है?
- 10. FIREFOX - एचटीएमएल - पासवर्ड इनपुट - जब पृष्ठ लोड होता है तो डेटा में डेटा होता है?
- 11. जब कोई प्रकार स्वयं होता है तो क्या करना है?
- 12. क्या होता है जब डॉकर होस्ट पुनरारंभ होता है?
- 13. TaskCanceledException क्यों होता है?
- 14. जब कोई कॉन्स्ट विधि सार्वजनिक होती है और गैर-कॉन्स्टेंस संरक्षित होता है तो सी ++ क्यों नहीं खड़ा होता है?
- 15. क्या होता है जब एक .NET अनुप्रयोग शुरू होता है?
- 16. जब dereference ऑपरेटर (*) अधिभारित होता है, तो इसका उपयोग * प्रभावित होता है?
- 17. जब कोई नोड node.js में टिक समाप्त होता है तो कौन सी घटनाएं निर्दिष्ट होती हैं?
- 18. जब कोई फ़ंक्शन समाप्त होता है तो इसका क्या अर्थ होता है}) (jQuery) ;?
- 19. क्या होता है जब 'सक्षमप्रोडोड() `
- 20. जब आप कोई प्रोग्राम चलाते हैं तो क्या होता है?
- 21. जब माउस "स्थिति: निश्चित" तत्व से अधिक होता है तो व्हील स्क्रॉलिंग ईवेंट क्यों फायरिंग नहीं होता है?
- 22. MAX फ़ंक्शन के साथ 0 सेट कैसे होता है जब यह पूर्ण होता है?
- 23. स्ट्रिंगउट्स इनपुट है जब इनपुट "???" होता है, क्यों?
- 24. एएसपी.नेट में क्यों एक बटन क्लिक इवेंट निष्पादित होता है जब पेज रीफ्रेश होता है?
- 25. openssl_pkey_new() विफल क्यों होता है?
- 26. जब कोई एक अनचाहे फ़ाइल जोड़ता है, तो क्या यह तुरंत चरणबद्ध नहीं होता है?
- 27. जब यह डिवाइस ब्रेकपॉइंट तक पहुंचता है तो एक्सकोड फ्रीज होता है, जबकि डिवाइस
- 28. जब xact_abort चालू होता है तो एसक्यूएल सर्वर raiserror के बाद निष्पादन क्यों करता है?
- 29. जब कोई तर्क अधिभारित अधिभारित होता है तो `eq` क्यों काम नहीं करता है?
- 30. जब देव कंसोल ऊपर होता है तो मुझे क्रोम में बेहतर प्रदर्शन क्यों मिलता है?
क्या तुलना में तेज़ ??? –
@LaurentB यह ब्राउज़र पर सर्वर की तुलना में निश्चित रूप से तेज़ है ... – Glorfindel
मैं एक और भ्रम @ DenysSéguret hv। नोड काम करता है, यह कुछ आईओ शुरू करता है और कॉलबैक असाइन करता है। अब ओएस एक बार प्रक्रिया समाप्त कर देता है, जो कॉलबैक का आह्वान करता है? क्या यह घटना लूप फिर से है? यदि हां, तो क्या यह घटना लूप के हजारों कॉलबैक के उन हिस्सों को प्रबंधित करने के लिए एक गलती नहीं होगी? इवेंट लूप बहु थ्रेडेड क्यों नहीं है? –