Sobes.tech
Middle+

Ինչպես է աշխատում իրադարձությունների ցիկլը (Event Loop) Node.js-ում?

sobes.tech AI

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

Event Loop — դա մեխանիզմ է, որը թույլ է տալիս Node.js-ին իրականացնել ոչ բլոկավոր I/O գործողություններ, չնայած որ JavaScript-ը միատող լեզու է։ Event Loop-ը անընդհատ հետևում է կանչերի տախտակին, callback-ների հերթին և տարբեր իրադարձությունների հերթերին (ժամանակացույցներ, I/O):

Event Loop-ի հիմնական փուլերը՝

  1. timers: Կատարում է setTimeout() և setInterval()-ով պլանավորված callback-ները:
  2. pending callbacks: Կատարում է համակարգային գործողությունների I/O callback-ները (օրինակ՝ ցանցային սխալներ), հետաձգված մինչև հաջորդ iteration-ը:
  3. idle, prepare: ներքին փուլեր՝ Event Loop-ի:
  4. poll:
    • Հաշվարկում է, թե որքան ժամանակ պետք է բլոկավորել և հարցնել I/O գործողությունները:
    • Հաշվարկում է I/O callback-ների իրադարձությունները, երբ դրանց քանակը հասնում է սահմանաչափի կամ ժամանակը սպառվում է:
  5. check: Կատարում է setImmediate()-ով պլանավորված callback-ները:
  6. 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-ին արդյունավետ կերպով մշակել բազմաթիվ միաժամանակյա հարցումներ՝ առանց յուրաքանչյուրի համար առանձին թել ստեղծելու, ինչը ապահովում է բարձր կատարողականություն։