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:
- Sünkroonne kood täidetakse virnas.
- Asünkroonsed operatsioonid (näiteks
setTimeout,fetch) saadetakse Web API-dele. - Kui asünkroonne operatsioon on lõpetatud, asetatakse selle tagasikutsumine tagasikutsumise järjekorda.
- Sündmuste tsükkel ootab, kuni virn saab tühjaks.
- 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.