Sobes.tech
Middle

Pověz mi o událostní smyčce (event loop).

sobes.tech AI

Odpověď od AI

Událostní smyčka je základem asynchronní práce v JavaScriptu. Řídí vykonávání kódu, zpracování událostí a interakci s vnějším světem.

Hlavní komponenty:

  • Heap (Hromada): Oblast paměti pro alokaci objektů.
  • Stack (Zásobník): Místo, kde jsou uloženy kontexty vykonávání funkcí. Při volání funkce je umístěna na zásobník, při ukončení je odstraněna.
  • Web API: Rozhraní poskytovaná prohlížečem (DOM, AJAX, Timers atd.). Zpracovávají asynchronní operace.
  • Callback Queue (Fronta callbacků): Fronta zpráv souvisejících s událostmi. Web API sem umisťují callbacky dokončených asynchronních operací.
  • Událostní smyčka (Event Loop): Neustále sleduje zásobník a frontu callbacků. Pokud je zásobník prázdný, vezme první callback z fronty a umístí jej na zásobník ke spuštění.

Proces:

  1. Synchronous kód se vykonává na zásobníku.
  2. Asynchronní operace (setTimeout, fetch) jsou předávány Web API.
  3. Když asynchronní operace skončí, její callback je umístěn do fronty callbacků.
  4. Událostní smyčka čeká, až se zásobník vyprázdní.
  5. Když je zásobník prázdný, vezme první callback z fronty a umístí jej na zásobník, kde se vykoná.

Příklad s setTimeout:

console.log('Start');

setTimeout(() => {
  console.log('Uvnitř setTimeout');
}, 0);

console.log('Konec');

Výstup bude:

Start
Konec
Uvnitř setTimeout

Navzdory timeoutu 0 ms se callback setTimeout vykoná po synchronním kódu, protože vstupuje do fronty a čeká na vyprázdnění zásobníku.

V Node.js také existuje událostní smyčka, ale s určitými rozdíly v fázích zpracování front.