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 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 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.