Node.js हज़ारों रिक्वेस्ट्स को कैसे हैंडल करता है

लोग कहते हैं कि Node.js single-threaded है।

फिर भी, यह बिना रुके हज़ारों रिक्वेस्ट्स को हैंडल करता है, फ़ाइलें पढ़ता है और API कॉल्स करता है।

यह कैसे काम करता है?

इसका जवाब है libuv।

libuv एक C library है। यह Node.js को asynchronous और non-blocking I/O क्षमताएं प्रदान करती है। JavaScript अपने आप फ़ाइलें नहीं पढ़ सकता या नेटवर्क सॉकेट्स को मैनेज नहीं कर सकता। Node.js आपके ऑपरेटिंग सिस्टम से बात करने के लिए libuv का उपयोग करता है।

libuv के बिना, जब भी आप कोई फ़ाइल पढ़ेंगे, JavaScript रुक जाएगा। आपका ऐप अनरिस्पॉन्सिव (unresponsive) हो जाएगा।

libuv के साथ, फ़ाइल बैकग्राउंड में पढ़ी जाती है। JavaScript अन्य कोड को चलाना जारी रखता है।

उदाहरण:

console.log("Start");

fs.readFile("data.txt", "utf8", (err, data) => {
  console.log(data);
});

console.log("End");

आउटपुट: Start End (फ़ाइल की सामग्री)

Node.js फ़ाइल के पढ़ने के पूरा होने से पहले "End" प्रिंट कर देता है। यह इंतज़ार नहीं करता है।

libuv आपके कोड को कैसे मैनेज करता है:

The Event Loop: libuv उस लूप को चलाता है जो चेक करता है कि टास्क पूरे हुए या नहीं। जब टास्क पूरे हो जाते हैं, तो यह callbacks को एक queue में डाल देता है। • Thread Pool: JavaScript एक thread का उपयोग करता है। libuv worker threads के एक pool का उपयोग करता है। डिफ़ॉल्ट रूप से, इस pool में 4 threads होते हैं। ये threads भारी कार्यों को संभालते हैं जैसे:

  • File system operations
  • DNS lookups
  • Compression
  • Cryptography • Networking: libuv HTTP, TCP, और UDP sockets को मैनेज करता है। यह सर्वर को एक साथ कई कनेक्शन हैंडल करने की अनुमति देता है। • Timers: libuv setTimeout और setInterval को हैंडल करता है।

Execution flow इस तरह काम करता है:

  1. JavaScript आपके कोड को चलाता है।
  2. libuv भारी कार्यों को बैकग्राउंड में ले जाता है।
  3. JavaScript अगली लाइन पर बढ़ जाता है।
  4. जब टास्क पूरा हो जाता है, तो libuv Event Loop को सूचित करता है।
  5. Event Loop आपके callback को चलाता है।

एक पिज़्ज़ा शॉप के बारे में सोचें।

libuv के बिना, आप काउंटर पर खड़े होते हैं और हर दस सेकंड में पूछते हैं "क्या मेरा खाना तैयार है?" आप लाइन को ब्लॉक कर देते हैं।

libuv के साथ, आप ऑर्डर देते हैं, बैठ जाते हैं और नोटिफिकेशन का इंतज़ार करते हैं। पिज़्ज़ा तैयार होने तक आप अन्य काम करने के लिए स्वतंत्र रहते हैं।

सारांश:

• JavaScript execution: V8 Engine • Event Loop: libuv • File I/O: libuv • Network: libuv • Timers: libuv

libuv वह इंजन है जो Node.js को तेज़ रखता है।

Source: https://dev.to/kavindotdev/understanding-libuv-the-engine-behind-nodejs-asynchronous-programming-3n7o