Sobes.tech
Middle+

Kaip veikia įvykių ciklas (Event Loop) Node.js?

sobes.tech AI

Atsakymas iš AI

Event Loop — tai mechanizmas, leidžiantis Node.js vykdyti neblokuojančias I/O operacijas, nepaisant to, kad JavaScript yra viengubo srauto kalba. Event Loop nuolat stebi iškvietimų krūvą, kolbekų eilę ir įvairias įvykių eilutes (laikmačius, I/O).

Pagrindinės Event Loop fazės:

  1. timers: vykdo suplanuotus setTimeout() ir setInterval() kolbekus.
  2. pending callbacks: vykdo sisteminių operacijų (pvz., tinklo klaidų) kolbekus, kurie atidedami iki kitos Event Loop iteracijos.
  3. idle, prepare: vidinės Event Loop fazės.
  4. poll:
    • įvertina, kiek ilgai blokuoti ir kaip tikrinti įvesties-išvesties operacijas.
    • apdoroja įvykius I/O kolbekų eilėje, kai jų skaičius pasiekia tam tikrą ribą arba baigiasi laikas.
  5. check: vykdo suplanuotus setImmediate() kolbekus.
  6. close callbacks: vykdo uždarymo kolbekus, pvz., socket.destroy().

process.nextTick() ir mikroužduotys (įsipareigojimai, queueMicrotask()) vykdomi tarp fazių ir iki pereinant į kitą fazę ar baigiant dabartinę. process.nextTick() turi aukštesnį prioritetą nei mikroužduotys.

// Užduočių planavimo pavyzdžiai
console.log('Pradžia');

setTimeout(() => {
  console.log('Timer 0');
}, 0);

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

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

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

console.log('Pabaiga');

// Tipinis vykdymo tvarkaraštis (gali skirtis priklausomai nuo Node.js versijos ir apkrovos):
// Pradžia
// Pabaiga
// nextTick
// Promise
// Timer 0  (timers fazėje)
// setImmediate (check fazėje)

Event Loop leidžia Node.js efektyviai apdoroti daugybę paralelinių užklausų be atskiro srauto kūrimo, užtikrinant aukštą našumą.