𝗡𝗼𝗱𝗲.𝗷𝘀 𝗘𝘃𝗲𝗻𝘁 𝗟𝗼𝗼𝗽 𝗘𝘅𝗽𝗹𝗮𝗶𝗻𝗲𝗱
Node.js एका सिंगल थ्रेडचा (single thread) वापर करते. एकाच वेळी हजारो विनंत्या (requests) कशा हाताळल्या जातात, असा प्रश्न तुम्हाला पडू शकतो.
याचे रहस्य 'Event Loop' मध्ये आहे.
एखादे काम पूर्ण होण्याची वाट पाहण्याऐवजी, Node.js वेळखाऊ कामे ऑपरेटिंग सिस्टमकडे पाठवते. ते पुढच्या कामाकडे वळत राहते. यामुळे तुमचे ॲप्लिकेशन्स जलद आणि प्रतिसादक्षम (responsive) बनतात.
Blocking विरुद्ध Non-blocking
जर तुम्ही readFileSync सारखी सिंक (sync) फंक्शन्स वापरली, तर सर्व्हर थांबतो. फाईल वाचून पूर्ण होईपर्यंत तो वाट पाहतो. इतर कोणत्याही वापरकर्त्याला प्रतिसाद मिळत नाही. यामुळे तुमच्या परफॉर्मन्सवर (performance) वाईट परिणाम होतो.
जर तुम्ही fs.readFile वापरले, तर सर्व्हर चालू राहतो. फाईल बॅकग्राउंडमध्ये वाचली जात असताना तो इतर विनंत्या हाताळतो.
Event Loop कसे कार्य करते
लूप अनेक टप्प्यांमधून जाते:
• Timers: setTimeout आणि setInterval हाताळते.
• Pending Callbacks: सिस्टम लेव्हलच्या त्रुटी (errors) हाताळते.
• Poll: नवीन कनेक्शन्स स्वीकारते आणि डेटाबेस क्वेरीसारखी I/O प्रक्रिया हाताळते.
• Check: setImmediate हाताळते.
• Close Callbacks: सॉकेट क्लोजर (socket closures) हाताळते.
प्राधान्यक्रम (The Priority Order)
सर्व कामे सारखी नसतात. Node.js दोन क्यू (queues) वापरते:
- Microtask Queue: यामध्ये Promises साठवले जातात.
- Callback Queue: यामध्ये
setTimeoutआणि I/O साठवले जातात.
Microtask Queue नेहमी आधी चालते. जर तुमच्याकडे एक Promise आणि एक setTimeout असेल, तर टाइमर येण्यापूर्वी Promise पूर्ण होईल.
Call Stack आणि Queues
Call Stack सध्या कोणता कोड रन होत आहे याचा मागोवा घेते. जेव्हा एखादे काम पूर्ण होते, तेव्हा त्याचे 'callback' एका क्यूमध्ये जाते. जोपर्यंत Call Stack रिकामी होत नाही, तोपर्यंत Event Loop क्यूमधून कामे घेत नाही.
या चुका टाळा:
• इन्फिनिट लूप्स (infinite loops) वापरू नका. यामुळे तुमचा संपूर्ण ॲप फ्रीज होऊ शकतो. • प्रोडक्शनमध्ये (production) सिंक्रोनस फाईल मेथड्स वापरू नका. • मेन थ्रेडवर (main thread) जड गणिती प्रक्रिया किंवा व्हिडिओ प्रोसेसिंग करू नका.
जड कामांसाठी, Worker Threads किंवा बॅकग्राउंड जॉब्स वापरा.
सारांश
Node.js जलद आहे कारण ते वाट पाहत नाही. ते I/O कामे सोपवते आणि निकाल व्यवस्थापित करण्यासाठी Event Loop चा वापर करते. या आर्किटेक्चरमुळे एक सिंगल थ्रेड अनेक वापरकर्त्यांना सेवा देऊ शकतो.
Event Loop चा कोणता भाग तुम्हाला शिकायला सर्वात कठीण गेला? मला कमेंट्समध्ये सांगा.