Sobes.tech
Middle+

Node.js'te olaylar döngüsü (Event Loop) кандай иштейт?

sobes.tech AI

AIден жооп

Event Loop — бул Node.js тарабынан блоктогон эмес I/O операцияларын аткарууга мүмкүндүк берген механизм, JavaScript биротоло бир жипте иштегендиктен. Event Loop үзгүлтүксүз түрдө чакыруу стекин, колбэк кезегин жана ар кандай окуялар кезегин (таймерлер, I/O) көзөмөлдөйт.

Event Loopтун негизги фазалары:

  1. timers: setTimeout() жана setInterval() пландаган колбектерди аткарат.
  2. pending callbacks: системдик операциялардын (мисалы, тармактык каталар) колбектерин аткарат, алар кийинки Event Loop итерациясына чейин күтүлөт.
  3. idle, prepare: Event Loopтун ички фазалары.
  4. poll:
    • канча убакытка блоктоп, киргизүү-чыгуу операцияларын сурап-издөө керектигин эсептейт.
    • I/O колбектеринин кезегиндеги окуяларды иштетет, алардын саны белгилүү чектен ашканда же убакыт бүтүп калганда.
  5. check: пландаган setImmediate() колбектерин аткарат.
  6. close callbacks: жабуу колбектерин, мисалы, 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ке көптөгөн параллелдүү суроолорду эффективдүү иштетүүгө мүмкүндүк берет, ар бирине өзүнчө жип түзбөстөн, бул жогорку иштөөчөндүктү камсыздайт.