Sobes.tech
Middle

Hadisə döngüsü (event loop) haqqında danış.

sobes.tech Süni İntellekt

AI-dan cavab

Hadisələr dövrü JavaScript-də asinxron işin əsasını təşkil edir. O, kodun icrasını, hadisələrin idarə olunmasını və xarici dünya ilə qarşılıqlı əlaqəni idarə edir.

Əsas komponentlər:

  • Heap (Heap): Obiektlərin ayrılması üçün yaddaş sahəsi.
  • Stack (Yığın): Funksiyaların icra kontekstlərinin saxlandığı yer. Funksiya çağırıldıqda, o yığına yerləşdirilir və tamamlandıqda silinir.
  • Web API-lər: Brauzer tərəfindən təmin olunan interfeyslər (DOM, AJAX, Timers və s.). Onlar asinxron əməliyyatları idarə edir.
  • Callback Queue (Callback Növbəsi): Hadisələrlə əlaqəli mesajların növbəsi. Web API-lər burada tamamlanan asinxron əməliyyatların callback-lərini yerləşdirir.
  • Hadisələr dövrü (Event Loop): Daim yığını və callback növbəsini izləyir. Əgər yığın boşdursa, ilk callback-i götürür və icra üçün yığına yerləşdirir.

Proses:

  1. Sinxron kod yığında icra olunur.
  2. Asinxron əməliyyatlar (setTimeout, fetch) Web API-lərə göndərilir.
  3. Asinxron əməliyyat tamamlandıqda, onun callback-i callback növbəsinə yerləşdirilir.
  4. Hadisələr dövrü yığının boşalmasını gözləyir.
  5. Yığın boş olduqda, hadisələr dövrü ilk callback-i götürür və yığına yerləşdirir, burada icra olunur.

setTimeout ilə nümunə:

console.log('Başlanğıc');

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

console.log('Son');

Nəticə:

Başlanğıc
Son
setTimeout daxilində

0 ms-lik vaxt aşımı olsa da, setTimeout callback-i sinxron koddan sonra icra olunur, çünki o növbəyə daxil olur və yığının boşalmasını gözləyir.

Node.js-də də hadisələr dövrü mövcuddur, lakin bəzi fərqlərlə.