Ինչպես է աշխատում իրադարձությունների ցիկլը (Event Loop) Node.js-ում?
sobes.tech AI
Պատասխան AI-ից
Event Loop — դա մեխանիզմ է, որը թույլ է տալիս Node.js-ին իրականացնել ոչ բլոկավոր I/O գործողություններ, չնայած որ JavaScript-ը միատող լեզու է։ Event Loop-ը անընդհատ հետևում է կանչերի տախտակին, callback-ների հերթին և տարբեր իրադարձությունների հերթերին (ժամանակացույցներ, I/O):
Event Loop-ի հիմնական փուլերը՝
- timers: Կատարում է
setTimeout()ևsetInterval()-ով պլանավորված callback-ները: - pending callbacks: Կատարում է համակարգային գործողությունների I/O callback-ները (օրինակ՝ ցանցային սխալներ), հետաձգված մինչև հաջորդ iteration-ը:
- idle, prepare: ներքին փուլեր՝ Event Loop-ի:
- poll:
- Հաշվարկում է, թե որքան ժամանակ պետք է բլոկավորել և հարցնել I/O գործողությունները:
- Հաշվարկում է I/O callback-ների իրադարձությունները, երբ դրանց քանակը հասնում է սահմանաչափի կամ ժամանակը սպառվում է:
- check: Կատարում է
setImmediate()-ով պլանավորված callback-ները: - close callbacks: Կատարում է փակման callback-ները, օրինակ՝
socket.destroy():
process.nextTick() և միկրոտասքները (պայմաններ, queueMicrotask()) կատարվում են միջեւ Event Loop-ի փուլերի միջև և նախքան հաջորդ փուլին անցնելը կամ ընթացիկը ավարտելը։ process.nextTick()-ը ավելի բարձր առաջնահերթություն ունի, քան միկրոտասքները:
// Թվային առաջադրանքների պլանավորման օրինակներ
console.log('Սկիզբ');
setTimeout(() => {
console.log('Ժամանակաչափ 0');
}, 0);
setImmediate(() => {
console.log('setImmediate');
});
process.nextTick(() => {
console.log('nextTick');
});
Promise.resolve().then(() => {
console.log('Promise');
});
console.log('Ավարտ');
// Տիպիկ կատարման կարգը (կարող է տարբեր լինել Node.js տարբերակով և բեռով)
// Սկիզբ
// Ավարտ
// nextTick
// Promise
// Ժամանակաչափ 0 (կատարվում է timers փուլում)
// setImmediate (կատարվում է check փուլում)
Event Loop-ը թույլ է տալիս Node.js-ին արդյունավետ կերպով մշակել բազմաթիվ միաժամանակյա հարցումներ՝ առանց յուրաքանչյուրի համար առանձին թել ստեղծելու, ինչը ապահովում է բարձր կատարողականություն։