Node.js Event Loop ని అర్థం చేసుకోవడం

Event Loop అనేది ఒక వర్కర్ (worker) కాదు. అది ఒక కోఆర్డినేటర్ (coordinator).

చాలా మంది డెవలపర్లు Event Loop ని క్లిష్టంగా భావిస్తారు. ఒకేసారి చాలా కాన్సెప్ట్‌లను కలపడం వల్ల ఈ ఇబ్బంది వస్తుంది. మీరు libuv, Call Stack, Promises మరియు I/O అన్నింటినీ ఒకే సమయంలో ట్రాక్ చేయాల్సి ఉంటుంది.

ఇక్కడే అసలు విషయం ఉంది. Event Loop పనులను షెడ్యూల్ చేస్తుంది. అది పనిని చేయదు.

JavaScript ఒక సింగిల్ త్రెడ్ (single thread) పై నడుస్తుంది. అంటే కోడ్ ఒక సరళ రేఖలో నడుస్తుంది. ఒక పని పూర్తయిన తర్వాతే తదుపరి పని ప్రారంభమవుతుంది. ప్రోగ్రామ్ మొత్తం ఆగిపోకుండా, ఫైల్స్ చదవడం లేదా నెట్‌వర్క్ రిక్వెస్ట్‌ల వంటి అసింక్రోనస్ (asynchronous) పనులను నిర్వహించడానికి మనకు ఒక సిస్టమ్ అవసరం.

ఇది ఎలా పనిచేస్తుంది:

Event Loop వివిధ క్యూల (queues) నుండి కాల్‌బ్యాక్‌లను (callbacks) Call Stack లోకి మారుస్తుంది. ప్రతి ఫేజ్‌ను ఒక లైన్ (line) లాగా ఊహించుకోండి. లైన్‌లో ఉన్న వ్యక్తులను గదిలోకి పంపే వ్యక్తిలా Event Loop పనిచేస్తుంది.

ప్రధాన ఫేజ్‌లు ఇవి:

Event Loop కి సొంతంగా Call Stack ఉంటుందని అనుకోవడం ఒక సాధారణ తప్పు. దానికి అది ఉండదు. రన్‌టైమ్ (runtime) కి ఒకే ఒక Call Stack మరియు ఒక microtask queue ఉంటాయి.

ఈ ప్రక్రియ ఈ క్రింది క్రమాన్ని అనుసరిస్తుంది:

  1. Event Loop ప్రస్తుత ఫేజ్ నుండి ఒక కాల్‌బ్యాక్‌ను ఎంచుకుంటుంది.
  2. అది ఆ కాల్‌బ్యాక్‌ను Call Stack లోకి పుష్ చేస్తుంది.
  3. Call Stack కోడ్‌ను రన్ చేస్తుంది.
  4. కాల్‌బ్యాక్ పూర్తయిన తర్వాత, ఇంజిన్ microtask queue ని క్లియర్ చేస్తుంది. Promises మరియు async/await ఇక్కడే ఉంటాయి.
  5. Event Loop తదుపరి ఫేజ్‌కి వెళ్తుంది.

మీరు setTimeout(..., 0) ఉపయోగిస్తే, అది Timers ఫేజ్‌కి వెళ్తుంది. మీరు setImmediate(...) ఉపయోగిస్తే, అది Check ఫేజ్‌కి వెళ్తుంది.

అసలైన పని (heavy lifting) OS kernel మరియు libuv లో జరుగుతుంది. JavaScript ఎప్పుడు స్పందించాలో Event Loop కేవలం చెబుతుంది.

Source: https://dev.to/joaovictor6/event-loop-entendendo-uma-das-bases-do-node-41a