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:
- timers: vykdo suplanuotus
setTimeout()irsetInterval()kolbekus. - pending callbacks: vykdo sisteminių operacijų (pvz., tinklo klaidų) kolbekus, kurie atidedami iki kitos Event Loop iteracijos.
- idle, prepare: vidinės Event Loop fazės.
- 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.
- check: vykdo suplanuotus
setImmediate()kolbekus. - 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ą.