𝗨𝗻𝗱𝗲𝗿𝘀𝘁𝗮𝗻𝗱𝗶𝗻𝗴 𝘁𝗵𝗲 𝗡𝗼𝗱𝗲.𝗷𝘀 𝗘𝘃𝗲𝗻𝘁 𝗟𝗼𝗼𝗽
Event Loop हा कोणताही कामगार (worker) नाही. तो एक समन्वयक (coordinator) आहे.
अनेक डेव्हलपर्सना Event Loop गुंतागुंतीचा वाटतो. अनेकदा एकाच वेळी खूप सारे संकल्पना एकत्र आल्यामुळे ही अडचण येते. तुम्हाला libuv, Call Stack, Promises आणि I/O या सर्वांचा एकाच वेळी मागोवा घ्यावा लागतो.
सत्य अगदी साधे आहे. Event Loop कामाचे वेळापत्रक (schedule) ठरवतो. तो स्वतः काम करत नाही.
JavaScript एका सिंगल थ्रेडवर (single thread) चालते. याचा अर्थ कोड एका सरळ रेषेत चालतो. पुढचे काम सुरू होण्यापूर्वी पहिले काम पूर्ण होणे आवश्यक आहे. संपूर्ण प्रोग्राम थांबवल्याशिवाय फाईल्स वाचणे किंवा नेटवर्क रिक्वेस्ट यांसारखी asynchronous कामे व्यवस्थापित करण्यासाठी आपल्याला एका सिस्टमची गरज असते.
ते कसे कार्य करते:
Event Loop वेगवेगळ्या queues मधून callbacks Call Stack मध्ये हलवतो. प्रत्येक phase ला एक रांग समजा. Event Loop म्हणजे रांगेतील लोकांना खोलीत नेणारा व्यक्ती आहे.
मुख्य phases खालीलप्रमाणे आहेत:
- Timers: setTimeout आणि setInterval मधून येणारे callbacks हाताळते.
- Pending Callbacks: TCP errors सारख्या विशिष्ट सिस्टम एरर्स हाताळते.
- Idle and Prepare: libuv द्वारे वापरले जाणारे अंतर्गत (internal) phases. तुम्ही यांचा वापर करणार नाही.
- Poll: सर्वात महत्त्वाचा phase. हे फाईल रीड किंवा HTTP रिक्वेस्ट यांसारख्या नवीन I/O इव्हेंट्स मिळवते.
- Check: setImmediate callbacks हाताळते.
- Close Callbacks: socket closures सारखे क्लोजिंग इव्हेंट्स हाताळते.
एक सामान्य चूक म्हणजे Event Loop कडे स्वतःचा Call Stack आहे असे मानणे. तसे नाही. रनटाइमकडे (runtime) एकच Call Stack आणि एक microtask queue असते.
ही प्रक्रिया या प्रवाहानुसार (flow) चालते:
- Event Loop सध्याच्या phase मधून एक callback निवडतो.
- तो त्या callback ला Call Stack मध्ये ढकलतो (push करतो).
- Call Stack कोड रन करतो.
- एकदा का callback पूर्ण झाले की, इंजिन microtask queue रिकामी करते. Promises आणि async/await येथेच असतात.
- Event Loop पुढच्या phase कडे वळतो.
जर तुम्ही setTimeout(..., 0) वापरले, तर ते Timers phase मध्ये जाते.
जर तुम्ही setImmediate(...) वापरले, तर ते Check phase मध्ये जाते.
मुख्य काम (heavy lifting) OS kernel आणि libuv मध्ये होते. Event Loop फक्त JavaScript ला सांगतो की आता प्रतिसाद देण्याची वेळ आली आहे.
Source: https://dev.to/joaovictor6/event-loop-entendendo-uma-das-bases-do-node-41a