Obsah
Event Loop
Event Loop je mechanismus používaný v prostředích založených na událostech (event-driven systems), který zajišťuje zpracování událostí a asynchronních operací. Je klíčovou součástí technologií jako JavaScript: Kompletní monografie od A do Z a Node.js.
Jeho úkolem je nepřetržitě sledovat frontu událostí a spouštět příslušné funkce ve chvíli, kdy jsou připraveny k vykonání.
Proč je Event Loop potřeba
JavaScript běží ve většině případů v jednom vlákně (single-threaded). To znamená, že dokáže v jednom okamžiku vykonávat pouze jednu operaci.
Přesto mohou aplikace současně:
načítat data ze serveru, pracovat se soubory, čekat na kliknutí uživatele, spouštět časovače, zpracovávat síťovou komunikaci.
To umožňuje právě mechanismus Event Loop.
Princip fungování
Event Loop neustále kontroluje, zda jsou ve frontě připravené úlohy.
Call Stack ↓ Asynchronní operace ↓ Callback Queue ↓ Event Loop ↓ Vykonání callbacku
Průběh:
Program spustí asynchronní operaci. Operace běží mimo hlavní vlákno. Po dokončení je callback zařazen do fronty událostí. Event Loop zjistí, zda je hlavní zásobník volný. Pokud ano, callback se vykoná.
Call Stack
Call Stack (zásobník volání) obsahuje aktuálně vykonávané funkce.
Příklad:
function first() { second(); } function second() { console.log("Ahoj"); } first();
Při spuštění se funkce ukládají na zásobník a po dokončení se z něj odebírají.
Callback Queue
Callback Queue obsahuje funkce čekající na spuštění.
Příklad:
setTimeout(() => { console.log("Hotovo"); }, 1000);
Po uplynutí jedné sekundy je callback zařazen do fronty a čeká na zpracování Event Loopem.
Příklad fungování
console.log("První"); setTimeout(() => { console.log("Druhý"); }, 0); console.log("Třetí");
Výstup:
První Třetí Druhý
I když je časovač nastaven na 0 ms, callback se vykoná až po dokončení aktuálního kódu.
Event Loop v Node.js
V prostředí Node.js Event Loop zajišťuje efektivní obsluhu:
HTTP požadavků, práce se soubory, databázových operací, síťové komunikace, časovačů.
Díky tomu může jediný proces obsluhovat tisíce současných připojení.
Výhody
Efektivní práce s asynchronními operacemi. Nízké nároky na systémové prostředky. Vysoká škálovatelnost. Jednodušší správa vláken.
Nevýhody
Dlouhé synchronní operace mohou blokovat celý proces. Náročnější pochopení pro začátečníky. Chyby v asynchronním kódu se mohou obtížně ladit.
Související pojmy
JavaScript: Kompletní monografie od A do Z Node.js Event Event Handler Event-Driven Programming Callback promise async await call stack
Shrnutí
Event Loop je mechanismus, který koordinuje zpracování událostí a asynchronních operací v JavaScriptu a Node.js. Neustále kontroluje frontu událostí a přesouvá připravené úlohy do hlavního zásobníku volání. Díky tomu mohou aplikace efektivně reagovat na uživatelské akce, síťové požadavky i další události bez nutnosti vytváření velkého množství vláken.
