Sobes.tech
Middle

Дар бораи даврзаниши ҳодиса (event loop) гап зан.

sobes.tech AI

Ҷавоб аз AI

Цикли воқеаҳо асоси кори асинхронӣ дар JavaScript мебошад. Он иҷрои коди, коркарди воқеаҳо ва ҳамкории бо ҷаҳони берунро идора мекунад.

Компонентҳои асосӣ:

  • Heap (Heap): Минтақаи хотира барои тақсим кардани объектҳо.
  • Stack (Stack): Ҷое, ки контексти иҷрои функсияҳо нигоҳ дошта мешавад. Вақте ки функсия даъват мешавад, он ба stack ҷойгир мешавад ва вақте ки анҷом меёбад, хориҷ карда мешавад.
  • Web API: Интерфейсҳое, ки браузер пешниҳод мекунад (DOM, AJAX, Timers ва ғайра). Онҳо амалҳои асинхронро идора мекунанд.
  • Callback Queue (Қуттии Callback): Қуттии паёмҳо, ки бо воқеаҳо алоқаманд аст. Web API-ҳо callback-ҳои амалҳои асинхронро дар ин ҷо мегузоранд.
  • Event Loop (Цикли воқеа): Бо доимӣ stack ва callback queue-ро назорат мекунад. Агар stack холӣ бошад, аввалин callback-ро мегирад ва онро ба stack барои иҷро мегузорад.

Раванд:

  1. Кодекси синхронӣ дар stack иҷро мешавад.
  2. Амалҳои асинхронӣ (setTimeout, fetch) ба Web API-ҳо фиристода мешаванд.
  3. Вақте ки амалҳои асинхронӣ ба охир мерасанд, callback-ҳои онҳоро ба callback queue мегузоранд.
  4. Цикли воқеа интизор аст, ки stack холӣ шавад.
  5. Вақте ки stack холӣ мешавад, цикли воқеа callback-ро мегирад ва онро ба stack мегузорад, ки иҷро шавад.

Масалан бо setTimeout:

console.log('Оғоз');

setTimeout(() => {
  console.log('Дар setTimeout');
}, 0);

console.log('Анҷом');

Натиҷа:

Оғоз
Анҷом
Дар setTimeout

Ҳатто бо тайм-аути 0 мс, callback-и setTimeout пас аз коди синхрон иҷро мешавад, зеро он ба қуттӣ дохил мешавад ва интизор аст, ки stack холӣ шавад.

Дар Node.js низ як цикл воқеа вуҷуд дорад, аммо бо баъзе фарқиятҳо дар марҳилаҳои коркарди қуттӣ.