Sobes.tech
Middle+

Node.js-də hadisə döngüsü (Event Loop) necə işləyir?

sobes.tech Süni İntellekt

AI-dan cavab

Event Loop — bu mexanizmdir ki, Node.js-ə qeyri-bloklayan G/Ç əməliyyatlarını yerinə yetirməyə imkan verir, JavaScript isə tək ipli dil olmasına baxmayaraq. Event Loop davamlı olaraq çağrı yığını, callback növbəsini və müxtəlif hadisə növbələrini (zamanlayıcılar, G/Ç) izləyir.

Event Loop-un əsas mərhələləri:

  1. timers: setTimeout()setInterval() ilə planlaşdırılmış callbackləri icra edir.
  2. pending callbacks: Sistem G/Ç əməliyyatlarının callbacklərini icra edir (məsələn, şəbəkə xətaları), növbəti Event Loop iterasiyasına qədər gecikdirilir.
  3. idle, prepare: Event Loop-un daxili mərhələləri.
  4. poll:
    • Nə qədər vaxt bloklamaq və G/Ç əməliyyatlarını sorğulamaq lazım olduğunu hesablayır.
    • G/Ç callback növbəsindəki hadisələri, onların sayı müəyyən limiti keçdikdə və ya vaxt bitdikdə, işləyir.
  5. check: setImmediate() ilə planlaşdırılmış callbackləri icra edir.
  6. close callbacks: Bağlanış callbacklərini icra edir, məsələn, socket.destroy().

process.nextTick() və mikro tapşırıqlar (sözlər, queueMicrotask()) arasında və növbəti mərhələyə keçmədən və ya cari mərhələ tamamlanmadan əvvəl icra olunur. process.nextTick() mikro tapşırıqlardan daha yüksək prioritetə malikdir.

// Tapşırıq planlaşdırma nümunələri
console.log('Başlanğıc');

setTimeout(() => {
  console.log('Timer 0');
}, 0);

setImmediate(() => {
  console.log('setImmediate');
});

process.nextTick(() => {
  console.log('nextTick');
});

Promise.resolve().then(() => {
  console.log('Promise');
});

console.log('Son');

// Tipik icra sırası (Node.js versiyasına və yüklənməyə görə dəyişə bilər):
// Başlanğıc
// Son
// nextTick
// Promise
// Timer 0  (timers mərhələsində icra olunur)
// setImmediate (check mərhələsində icra olunur)

Event Loop Node.js-ə çoxsaylı paralel sorğuları səmərəli şəkildə işləməyə imkan verir, hər biri üçün ayrıca ip yaratmadan, bu isə yüksək performans təmin edir.