Sobes.tech
Middle+

Kā darbojas notikumu cikls (Event Loop) Node.js?

sobes.tech AI

Atbilde no AI

Event Loop — tas mehānisms, kas ļauj Node.js izpildīt neblokējošas I/O operācijas, neskatoties uz to, ka JavaScript ir vienas pavediena valoda. Event Loop nepārtraukti uzrauga izsaukumu steku, kolbeku rindu un dažādas notikumu rindas (taimerus, I/O).

Galvenās Event Loop fāzes:

  1. timers: izpilda plānotos setTimeout() un setInterval() kolbekus.
  2. pending callbacks: izpilda sistēmas operāciju (piemēram, tīkla kļūdu) kolbekus, kas ir atlikti līdz nākamajai Event Loop iterācijai.
  3. idle, prepare: iekšējās Event Loop fāzes.
  4. poll:
    • novērtē, cik ilgi jābūt bloķētam un kā jāpārbauda I/O operācijas.
    • apstrādā I/O kolbeku rindas notikumus, kad to skaits sasniedz noteiktu limitu vai beidzas laiks.
  5. check: izpilda plānotos setImmediate() kolbekus.
  6. close callbacks: izpilda aizvēršanas kolbekus, piemēram, socket.destroy().

process.nextTick() un mikrouzdevumi (solījumi, queueMicrotask()) tiek izpildīti starp fāzēm un pirms pārejas uz nākamo fāzi vai pašreizējās pabeigšanas. process.nextTick() ir prioritātes ziņā augstāk nekā mikrouzdevumi.

// Uzdevumu plānošanas piemēri
console.log('Sākums');

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

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

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

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

console.log('Beigas');

// Tipiska izpildes secība (var atšķirties atkarībā no Node.js versijas un slodzes):
// Sākums
// Beigas
// nextTick
// Promise
// Taimeris 0  (timers fāzē)
// setImmediate (check fāzē)

Event Loop ļauj Node.js efektīvi apstrādāt daudzus paralēlus pieprasījumus bez katram izveidojot atsevišķu pavedienu, nodrošinot augstu veiktspēju.