Middle+
Jak funguje událostní smyčka (Event Loop) v Node.js?
sobes.tech AI
Odpověď od AI
Event Loop — je mechanismus, který umožňuje Node.js provádět neblokující I/O operace, i přestože JavaScript je jednovlákný jazyk. Event Loop nepřetržitě sleduje zásobník volání, frontu callbacků a různé fronty událostí (časovače, I/O).
Hlavní fáze Event Loop:
- timers: Spouští callbacky naplánované pomocí
setTimeout()asetInterval(). - pending callbacks: Spouští callbacky systémových operací I/O (například síťové chyby), odložené do další iterace Event Loop.
- idle, prepare: Interní fáze Event Loop.
- poll:
- Určuje, jak dlouho blokovat a dotazovat operace I/O.
- Zpracovává události v frontě I/O callbacků, když jejich počet dosáhne limitu nebo vyprší čas.
- check: Spouští callbacky naplánované pomocí
setImmediate(). - close callbacks: Spouští callbacky uzavření, například
socket.destroy().
process.nextTick() a mikroúkoly (promise, queueMicrotask()) se vykonávají mezi fázemi Event Loop a před přechodem do další fáze nebo ukončením aktuální. process.nextTick() má vyšší prioritu než mikroúkoly.
// Příklady plánování úkolů
console.log('Start');
setTimeout(() => {
console.log('Timer 0');
}, 0);
setImmediate(() => {
console.log('setImmediate');
});
process.nextTick(() => {
console.log('nextTick');
});
Promise.resolve().then(() => {
console.log('Promise');
});
console.log('Konec');
// Typický pořadí provádění (může se lišit v závislosti na verzi Node.js a zátěži):
// Start
// Konec
// nextTick
// Promise
// Timer 0 (bude proveden v fázi timers)
// setImmediate (bude proveden ve fázi check)
Event Loop umožňuje Node.js efektivně zpracovávat mnoho paralelních požadavků bez vytváření samostatného vlákna pro každý z nich, což zajišťuje vysoký výkon.