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:
- timers: Spúšťa naplánované callbacky s
setTimeout()asetInterval(). - 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.
- idle, prepare: Interné fázy Event Loop.
- 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.
- check: Spúšťa callbacky naplánované s
setImmediate(). - 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.