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:
- timers: izpilda plānotos
setTimeout()unsetInterval()kolbekus. - 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.
- idle, prepare: iekšējās Event Loop fāzes.
- 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.
- check: izpilda plānotos
setImmediate()kolbekus. - 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.