Sobes.tech
Middle+

Ako funguje slučaj udaljenosti (Event Loop) v Node.js?

sobes.tech AI

Odpoveď od AI

Event Loop — je mechanizmus, ktorý umožňuje Node.js vykonávať neblokujúce I/O operácie, aj keď JavaScript je jednothreadový jazyk. Event Loop nepretržite monitoruje zásobník volaní, front callbackov a rôzne fronty udalostí (časovače, I/O).

Hlavné fázy Event Loop:

  1. timers: Spúšťa naplánované callbacky s setTimeout() a setInterval().
  2. pending callbacks: Spúšťa callbacky systémových operácií I/O (napríklad sieťové chyby), odložené do ďalšej iterácie Event Loop.
  3. idle, prepare: Interné fázy Event Loop.
  4. poll:
    • Počíta, ako dlho blokovať a kontrolovať operácie I/O.
    • Spracováva udalosti v fronte callbackov I/O, keď ich počet dosiahne limit alebo vyprší čas.
  5. check: Spúšťa callbacky naplánované s setImmediate().
  6. close callbacks: Spúšťa callbacky zatvorenia, napríklad socket.destroy().

process.nextTick() a mikroúlohy (sľuby, queueMicrotask()) sa vykonávajú medzi fázami Event Loop a pred prechodom na ďalšiu fázu alebo ukončením aktuálnej. process.nextTick() má vyššiu prioritu než mikroúlohy.

// Príklady plánovania úloh
console.log('Začiatok');

setTimeout(() => {
  console.log('Časovač 0');
}, 0);

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

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

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

console.log('Koniec');

// Typický poradie vykonávania (môže sa líšiť v závislosti od verzie Node.js a zaťaženia):
// Začiatok
// Koniec
// nextTick
// Promise
// Časovač 0  (bude vykonaný v fáze timers)
// setImmediate (bude vykonaný v fáze check)

Event Loop umožňuje Node.js efektívne spracovávať veľké množstvo paralelných požiadaviek bez vytvárania samostatného vlákna pre každú z nich, čo zabezpečuje vysoký výkon.