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