Node.js Event Loop ને સમજવું
Event Loop એ કોઈ વર્કર નથી. તે એક કોઓર્ડિનેટર છે.
ઘણા ડેવલપર્સને Event Loop જટિલ લાગે છે. મુશ્કેલી ઘણીવાર એકસાથે ઘણા બધા ખ્યાલોને મિક્સ કરવાને કારણે આવે છે. તમારે libuv, Call Stack, Promises અને I/O બધું એકસાથે ટ્રેક કરવું પડે છે.
અહીં સાચી વાત છે. Event Loop કામનું શેડ્યૂલ બનાવે છે. તે કામ કરતું નથી.
JavaScript એક સિંગલ થ્રેડ પર ચાલે છે. આનો અર્થ એ છે કે કોડ એક સીધી રેખામાં ચાલે છે. એક કાર્ય પૂરું થયા પછી જ બીજું કાર્ય શરૂ થઈ શકે છે. આખા પ્રોગ્રામને અટકાવ્યા વિના ફાઇલો વાંચવા અથવા નેટવર્ક રિક્વેસ્ટ જેવી asynchronous ટાસ્કનું સંચાલન કરવા માટે આપણને એક સિસ્ટમની જરૂર છે.
તે કેવી રીતે કામ કરે છે:
Event Loop વિવિધ ક્યુ (queues) માંથી callbacks ને Call Stack માં લાવે છે. દરેક ફેઝ (phase) ને એક લાઇન તરીકે વિચારો. Event Loop એ વ્યક્તિ છે જે લોકોને લાઇનમાંથી રૂમમાં લઈ જાય છે.
મુખ્ય ફેઝ આ મુજબ છે:
- Timers: setTimeout અને setInterval માંથી આવતા callbacks ને હેન્ડલ કરે છે.
- Pending Callbacks: TCP errors જેવી ચોક્કસ સિસ્ટમ એરર્સને હેન્ડલ કરે છે.
- Idle and Prepare: libuv દ્વારા ઉપયોગમાં લેવાતા આંતરિક ફેઝ છે. તમે આનો ઉપયોગ નહીં કરો.
- Poll: સૌથી મહત્વપૂર્ણ ફેઝ. તે ફાઇલ રીડ અથવા HTTP રિક્વેસ્ટ જેવી નવી I/O ઇવેન્ટ્સ મેળવે છે.
- Check: setImmediate callbacks ને હેન્ડલ કરે છે.
- Close Callbacks: socket ક્લોઝર જેવી ક્લોઝિંગ ઇવેન્ટ્સને હેન્ડલ કરે છે.
એક સામાન્ય ભૂલ એ છે કે એવું વિચારવું કે Event Loop પાસે પોતાનું Call Stack છે. તે નથી. રનટાઇમ પાસે એક જ Call Stack અને એક microtask queue હોય છે.
પ્રક્રિયા આ રીતે ચાલે છે:
- Event Loop વર્તમાન ફેઝમાંથી એક callback પસંદ કરે છે.
- તે તે callback ને Call Stack માં પુશ કરે છે.
- Call Stack કોડ રન કરે છે.
- એકવાર callback પૂરું થાય પછી, એન્જિન microtask queue ને ખાલી કરે છે. અહીં Promises અને async/await કામ કરે છે.
- Event Loop પછીના ફેઝ પર જાય છે.
જો તમે setTimeout(..., 0) નો ઉપયોગ કરો છો, તો તે Timers ફેઝમાં જાય છે.
જો તમે setImmediate(...) નો ઉપયોગ કરો છો, તો તે Check ફેઝમાં જાય છે.
મુખ્ય કામ OS kernel અને libuv માં થાય છે. Event Loop ફક્ત JavaScript ને જણાવે છે કે ક્યારે પ્રતિક્રિયા આપવાનો સમય છે.
સ્ત્રોત: https://dev.to/joaovictor6/event-loop-entendendo-uma-das-bases-do-node-41a