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