Sobes.tech
Middle

Խոսիր ինձ մասին իրադարձությունների ցիկլի մասին (event loop).

sobes.tech AI

Պատասխան AI-ից

Իրադարձությունների ցիկլը JavaScript-ում ասինխրոն աշխատանքի հիմքն է: Այն կառավարում է կոդի կատարմանը, իրադարձությունների մշակումը և արտաքին աշխարհի հետ փոխազդեցությունը:

Հիմնական բաղադրիչները՝

  • Heap (Հավաք): Օբյեկտների հատկացման հիշողության տարածք:
  • Stack (Պատ): Որտեղ պահվում են ֆունկցիաների կատարման կոնտեքստները: Երբ ֆունկցիա է կանչվում, այն տեղադրվում է պատում, և ավարտվելուց հետո՝ հեռացվում:
  • Web API-ներ: Բրաուզերի տրամադրած ինտերֆեյսներ (DOM, AJAX, Timers և այլն): Դրանք կառավարում են ասինխրոն օպերացիաները:
  • Callback Queue (Հետադարձ կանչերի հերթ): Հաղորդագրությունների հերթ, կապված իրադարձությունների հետ: Web API-ները այստեղ տեղադրում են ավարտված ասինխրոն օպերացիաների callback-ները:
  • Իրադարձությունների ցիկլ (Event Loop): Շարունակաբար հետևում է պատին և callback-ների հերթին: Եթե պատը դատարկ է, վերցնում է առաջին callback-ը և տեղադրում է այն կատարման համար:

Պրոցեսը՝

  1. Սինխրոն կոդը կատարվում է պատում:
  2. Ասինխրոն օպերացիաները (setTimeout, fetch) ուղարկվում են Web API-ներին:
  3. Երբ ասինխրոն օպերացիան ավարտվում է, նրա callback-ը տեղադրվում է callback հերթում:
  4. Իրադարձությունների ցիկլը սպասում է, մինչև պատը դատարկ լինի:
  5. Երբ պատը դատարկ է, ցիկլը վերցնում է առաջին callback-ը և տեղադրում այն պատում:

Օրինակ՝ setTimeout-ով՝

console.log('Սկիզբ');

setTimeout(() => {
  console.log('setTimeout-ի ներսում');
}, 0);

console.log('Ավարտ');

Արդյունքը՝

Սկիզբ
Ավարտ
setTimeout-ի ներսում

Չնայած ժամանակաչափը 0 միլիսեկունդ, setTimeout callback-ը կատարվում է սինխրոն կոդից հետո, քանի որ այն մտնում է հերթ և սպասում է պատի դատարկությանը:

Node.js-ում նույնպես կա իրադարձությունների ցիկլ, բայց որոշ տարբերություններով՝