Middle
Povedz mi o udalostnej slučke (event loop).
sobes.tech AI
Odpoveď od AI
Cykly udalostí je základom asynchrónnej práce v JavaScripte. Riadi vykonávanie kódu, spracovanie udalostí a interakciu s vonkajším svetom.
Hlavné komponenty:
- Heap (Heap): Oblasť pamäte na prideľovanie objektov.
- Stack (Zásobník): Miesto, kde sa ukladajú kontexty vykonávania funkcií. Pri volaní funkcie sa umiestni do zásobníka, pri ukončení sa odstráni.
- Web API: Rozhrania poskytované prehliadačom (DOM, AJAX, Timers a pod.). Spracúvajú asynchrónne operácie.
- Callback Queue (Fronta callbackov): Fronta správ súvisiacich s udalosťami. Web API sem umiestňujú callbacky dokončených asynchrónnych operácií.
- Event Loop (Udalostný cyklus): Neustále sleduje zásobník a frontu callbackov. Ak je zásobník prázdny, vezme prvý callback z fronty a umiestni ho do zásobníka na vykonanie.
Proces:
- Synchronous kód sa vykonáva na zásobníku.
- Asynchrónne operácie (
setTimeout,fetch) sa odosielajú do Web API. - Keď asynchrónna operácia skončí, jej callback sa umiestni do fronty callbackov.
- Udalostný cyklus čaká, kým sa zásobník nevyprázdni.
- Keď je zásobník prázdny, cyklus vezme prvý callback z fronty a umiestni ho do zásobníka, kde sa vykoná.
Príklad s setTimeout:
console.log('Začiatok');
setTimeout(() => {
console.log('Vnútri setTimeout');
}, 0);
console.log('Koniec');
Výstup bude:
Začiatok
Koniec
Vnútri setTimeout
Napriek timeoutu 0 ms sa callback setTimeout vykoná po synchronickom kóde, pretože vstupuje do fronty a čaká na vyprázdnenie zásobníka.
V Node.js tiež existuje cyklus udalostí, ale s niektorými rozdielmi v fázach spracovania front.