अब मेरे साथ यह कहें: async प्रोग्रामिंग का अर्थ बहु-थ्रेडेड नहीं है।
जावास्क्रिप्ट एक एकल थ्रेडेड रनटाइम है - आप बस जेएस में नए धागे बनाने में सक्षम नहीं हैं क्योंकि भाषा/रनटाइम इसका समर्थन नहीं करता है।
फ्रैंक यह सही ढंग से कहता है (हालांकि समझदारी से) अंग्रेजी में: एक मुख्य ईवेंट लूप होता है जो आपके ऐप में आने पर संभालता है। इसलिए, "इस HTTP अनुरोध को संभाल लें" ईवेंट कतार में जोड़ा जाएगा, फिर उपयुक्त होने पर ईवेंट लूप द्वारा संभाला जाएगा।
जब आप एसिंक ऑपरेशन (उदाहरण के लिए एक mysql डीबी क्वेरी) कहते हैं, node.js "हे, इस क्वेरी को निष्पादित करें" mysql पर भेजता है। चूंकि इस क्वेरी में कुछ समय लगेगा (मिलीसेकंड), node.js MySQL async लाइब्रेरी का उपयोग करके क्वेरी निष्पादित करता है - इवेंट लूप पर वापस आ रहा है और कुछ और कर रहा है जबकि mysql को वापस पाने के लिए प्रतीक्षा कर रहा है। उस HTTP अनुरोध को संभालने की तरह।
संपादित: इसके विपरीत, Node.js बस इंतजार कर सकता है चारों ओर mysql में वापस पाने के लिए (कुछ भी नहीं कर रही है)। इसे एक तुल्यकालिक कॉल कहा जाता है। एक रेस्तरां की कल्पना करो, जहां आपका वेटर खाना पकाने के लिए आपका ऑर्डर सबमिट करता है, फिर शेफ पकाते समय उसके अंगूठे नीचे बैठता है और twiddles। एक रेस्तरां में, जैसे node.js प्रोग्राम में, ऐसा व्यवहार मूर्खतापूर्ण है - आपके पास अन्य ग्राहक हैं जो भुखमरी हैं और उन्हें सेवा करने की आवश्यकता है। इस प्रकार आप यह सुनिश्चित करने के लिए जितना संभव हो सके असीमित होना चाहते हैं कि एक वेटर (या नोड.जेएस प्रक्रिया) जितना हो सके उतने लोगों की सेवा कर रहा है।
संपादित किया
Node.js mysql सी लाइब्रेरी का उपयोग कर, इसलिए तकनीकी रूप से उन सी पुस्तकालयों धागे बंद अंडे सकता है के साथ संचार, लेकिन जावास्क्रिप्ट के अंदर आप धागे के साथ कुछ नहीं कर सकते।
अधिक सटीक। "नोड.जेएस एक एसिंक्रोनस एपीआई के माध्यम से mysql के साथ संचार करता है। एसिंक्रोनस एपीआई का कार्यान्वयन सी में है और यह कार्यान्वयन सिर्फ थ्रेडपूल के माध्यम से सिंक्रोनस एपीआई चलाया जा सकता है"। तथ्य यह है कि एसिंक्रोनस एपीआई आंतरिक रूप से थ्रेड पूल का उपयोग कर सकता है, वह निम्न स्तर का विवरण है जिसकी आपको परवाह नहीं है। – Raynos
आह, इसलिए mysql एक अलग थ्रेड में चल रहा है, फिर यह एक ईवेंट को जेएस में वापस करने पर वापस जोड़ता है।अगर मैं अपने स्वयं के एसिंक मॉड्यूल बनाना चाहता था तो मैं उसी प्रभाव को प्राप्त करने के लिए नोड में बाल प्रक्रियाओं का उपयोग कर सकता था। – BigOmega
मुझे लगता है कि यहां 'थ्रेड' शब्द से बचने के लिए वास्तव में बेहतर है-लोग इसे सुनते समय झूठे निष्कर्षों पर कूदते हैं। एक एसिंक्रोनस कॉल थ्रेड का उपयोग कर सकता है, या एक प्रक्रिया कांटा कर सकता है, या जो कुछ भी कर सकता है; महत्वपूर्ण बात यह है कि घटना लूप में बाद में कॉलबैक या एक घटना हो सकती है। – flow