Sobes.tech
Middle

Räägi mulle sündmuste tsüklist (event loop).

sobes.tech AI

Vastus AI-lt

Sündmuste tsükkel on JavaScripti asünkroonse töö aluseks. See juhib koodi täitmist, sündmuste töötlemist ja suhtlemist välismaailmaga.

Peamised komponendid:

  • Heap (Heap): Mälu piirkond objektide eraldamiseks.
  • Stack (Stack): Koht, kus hoitakse funktsioonide täitmise kontekste. Funktsiooni kutsumisel pannakse see virna, ja lõpetamisel eemaldatakse see.
  • Web API-d: Päringud, mida pakub brauser (DOM, AJAX, Timers jne). Need töötlevad asünkroonseid operatsioone.
  • Tagasikutsumise järjekord (Callback Queue): Sõnumite järjekord, mis on seotud sündmustega. Web API-d asetavad siia lõpetatud asünkroonsete operatsioonide tagasikutsumised.
  • Sündmuste tsükkel (Event Loop): Pidevalt jälgib virna ja tagasikutsumise järjekorda. Kui virn on tühi, võtab see esimese tagasikutsumise järjekorrast ja asetab selle virna täitmiseks.

Protsess:

  1. Sünkroonne kood täidetakse virnas.
  2. Asünkroonsed operatsioonid (näiteks setTimeout, fetch) saadetakse Web API-dele.
  3. Kui asünkroonne operatsioon on lõpetatud, asetatakse selle tagasikutsumine tagasikutsumise järjekorda.
  4. Sündmuste tsükkel ootab, kuni virn saab tühjaks.
  5. Kui virn on tühi, võtab sündmuste tsükkel esimese tagasikutsumise järjekorrast ja asetab selle virna, kus see täidetakse.

Näide setTimeout-iga:

console.log('Start');

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

console.log('End');

Väljund on:

Start
End
Inside setTimeout

Vaatamata 0 ms ajale, täidetakse setTimeout-i tagasikutsumine pärast sünkroonset koodi, sest see satub järjekorda ja ootab virna tühjendamist.

Node.js-i sündmuste tsükkel eksisteerib samuti, kuid erinevate faasidega järjekorra töötlemisel.