Sobes.tech
Middle+

Hogyan működik az eseményhurok (Event Loop) a Node.js-ben?

sobes.tech MI

Válasz az MI-től

Event Loop — ez egy mechanizmus, amely lehetővé teszi a Node.js számára, hogy nem blokkoló I/O műveleteket hajtson végre, annak ellenére, hogy a JavaScript egyszálú nyelv. Az Event Loop folyamatosan figyeli a hívásstack-et, a callback sorozatot és különböző esemény sorokat (időzítők, I/O).

Az Event Loop fő fázisai:

  1. timers: végrehajtja a setTimeout() és setInterval() által ütemezett callbackokat.
  2. pending callbacks: végrehajtja a rendszer I/O műveleteinek callbackjait (pl. hálózati hibák), késleltetve a következő Event Loop iterációig.
  3. idle, prepare: belső fázisok az Event Loop-ban.
  4. poll:
    • kiszámítja, mennyi ideig blokkoljon és kérdezze le az I/O műveleteket.
    • feldolgozza az eseményeket az I/O callback sorban, amikor azok elérnek egy határt vagy az idő lejár.
  5. check: végrehajtja a setImmediate()-tel ütemezett callbackokat.
  6. close callbacks: végrehajtja a záró callbackokat, például a socket.destroy().

A process.nextTick() és a mikrofeladatok (ígéretek, queueMicrotask()) között és a következő fázisra való áttérés vagy a jelenlegi befejezése előtt kerülnek végrehajtásra. A process.nextTick() magasabb prioritással rendelkezik, mint a mikrofeladatok.

// Feladatütemezési példák
console.log('Kezdet');

setTimeout(() => {
  console.log('Időzítő 0');
}, 0);

setImmediate(() => {
  console.log('setImmediate');
});

process.nextTick(() => {
  console.log('nextTick');
});

Promise.resolve().then(() => {
  console.log('Promise');
});

console.log('Vége');

// Tipikus végrehajtási sorrend (változhat Node.js verziótól és terheléstől függően):
// Kezdet
// Vége
// nextTick
// Promise
// Időzítő 0  (a timers fázisban fog végrehajtódni)
// setImmediate (a check fázisban fog végrehajtódni)

Az Event Loop lehetővé teszi a Node.js számára, hogy hatékonyan kezeljen sok párhuzamos kérést anélkül, hogy minden kéréshez külön szálat hozna létre, ez pedig magas teljesítményt biztosít.