Node.js हजारो रिक्वेस्ट्स कशा हाताळते

लोक म्हणतात की Node.js सिंगल-थ्रेडेड (single-threaded) आहे.

तरीही, ते न थांबता हजारो रिक्वेस्ट्स हाताळते, फाइल्स वाचते आणि API कॉल्स करते.

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

याचे उत्तर आहे libuv.

libuv ही एक C लायब्ररी आहे. ती Node.js ला asynchronous आणि non-blocking I/O क्षमता प्रदान करते. JavaScript स्वतःहून फाइल्स वाचू शकत नाही किंवा नेटवर्क सॉकेट्स (network sockets) मॅनेज करू शकत नाही. 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 (file contents)

फाइल वाचून पूर्ण होण्यापूर्वीच Node.js "End" प्रिंट करते. ते थांबून पाहत नाही.

libuv तुमचा कोड कसा मॅनेज करते:

• The Event Loop: libuv एक लूप चालवते जो टास्क पूर्ण झाले आहेत की नाही हे तपासतो. टास्क पूर्ण झाल्यावर ते callbacks एका क्यू (queue) मध्ये टाकते. • Thread Pool: JavaScript एक थ्रेड वापरते. libuv वर्कर्स थ्रेड्सचा (worker threads) पूल वापरते. बाय डिफॉल्ट, या पूलमध्ये ४ थ्रेड्स असतात. हे थ्रेड्स खालीलंसारखे जड (heavy) टास्क हाताळतात:

  • File system operations
  • DNS lookups
  • Compression
  • Cryptography • Networking: libuv HTTP, TCP, आणि UDP सॉकेट्स मॅनेज करते. यामुळे सर्व्हर्स एकाच वेळी अनेक कनेक्शन्स हाताळू शकतात. • Timers: libuv setTimeout आणि setInterval हाताळते.

एक्झिक्यूशन फ्लो (execution flow) असा काम करतो:

  1. JavaScript तुमचा कोड रन करते.
  2. libuv जड टास्क बॅकग्राउंडमध्ये घेते.
  3. JavaScript पुढच्या लाईनवर जाते.
  4. टास्क पूर्ण झाल्यावर libuv Event Loop ला सूचित करते.
  5. Event Loop तुमचा callback रन करते.

एका पिझ्झा शॉपचा विचार करा.

libuv शिवाय, तुम्ही काउंटरवर उभे राहता आणि दर दहा सेकंदाला "माझे जेवण तयार आहे का?" असे विचारता. तुम्ही रांग अडवता (block करता).

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