Middle
Խոսիր ինձ մասին իրադարձությունների ցիկլի մասին (event loop).
sobes.tech AI
Պատասխան AI-ից
Իրադարձությունների ցիկլը JavaScript-ում ասինխրոն աշխատանքի հիմքն է: Այն կառավարում է կոդի կատարմանը, իրադարձությունների մշակումը և արտաքին աշխարհի հետ փոխազդեցությունը:
Հիմնական բաղադրիչները՝
- Heap (Հավաք): Օբյեկտների հատկացման հիշողության տարածք:
- Stack (Պատ): Որտեղ պահվում են ֆունկցիաների կատարման կոնտեքստները: Երբ ֆունկցիա է կանչվում, այն տեղադրվում է պատում, և ավարտվելուց հետո՝ հեռացվում:
- Web API-ներ: Բրաուզերի տրամադրած ինտերֆեյսներ (DOM, AJAX, Timers և այլն): Դրանք կառավարում են ասինխրոն օպերացիաները:
- Callback Queue (Հետադարձ կանչերի հերթ): Հաղորդագրությունների հերթ, կապված իրադարձությունների հետ: Web API-ները այստեղ տեղադրում են ավարտված ասինխրոն օպերացիաների callback-ները:
- Իրադարձությունների ցիկլ (Event Loop): Շարունակաբար հետևում է պատին և callback-ների հերթին: Եթե պատը դատարկ է, վերցնում է առաջին callback-ը և տեղադրում է այն կատարման համար:
Պրոցեսը՝
- Սինխրոն կոդը կատարվում է պատում:
- Ասինխրոն օպերացիաները (
setTimeout,fetch) ուղարկվում են Web API-ներին: - Երբ ասինխրոն օպերացիան ավարտվում է, նրա callback-ը տեղադրվում է callback հերթում:
- Իրադարձությունների ցիկլը սպասում է, մինչև պատը դատարկ լինի:
- Երբ պատը դատարկ է, ցիկլը վերցնում է առաջին callback-ը և տեղադրում այն պատում:
Օրինակ՝ setTimeout-ով՝
console.log('Սկիզբ');
setTimeout(() => {
console.log('setTimeout-ի ներսում');
}, 0);
console.log('Ավարտ');
Արդյունքը՝
Սկիզբ
Ավարտ
setTimeout-ի ներսում
Չնայած ժամանակաչափը 0 միլիսեկունդ, setTimeout callback-ը կատարվում է սինխրոն կոդից հետո, քանի որ այն մտնում է հերթ և սպասում է պատի դատարկությանը:
Node.js-ում նույնպես կա իրադարձությունների ցիկլ, բայց որոշ տարբերություններով՝