Sobes.tech
Middle+

Node.js'te Olay Döngüsü (Event Loop) nasıl çalışır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Event Loop — Node.js’in bloklamayan G/Ç işlemlerini gerçekleştirmesine olanak tanıyan bir mekanizmadır, JavaScript tek iş parçacıklı bir dil olmasına rağmen. Event Loop sürekli olarak çağrı yığını, geri çağrı kuyruğu ve çeşitli olay kuyruğu (zamanlayıcılar, G/Ç) izler.

Event Loop’un ana aşamaları:

  1. timers: setTimeout() ve setInterval() ile planlanan geri çağrıları yürütür.
  2. pending callbacks: Sistem G/Ç işlemlerinin geri çağrılarını (örneğin, ağ hataları) yürütür, bir sonraki Event Loop yinelemesine kadar ertelenir.
  3. idle, prepare: Event Loop’un dahili aşamaları.
  4. poll:
    • Ne kadar süreyle bloklanacağı ve G/Ç işlemlerinin nasıl sorgulanacağı hesaplanır.
    • G/Ç geri çağrı kuyruğundaki olaylar, belirli bir limite ulaşana veya zaman dolana kadar işlenir.
  5. check: setImmediate() ile planlanan geri çağrıları yürütür.
  6. close callbacks: Kapanış geri çağrılarını yürütür, örneğin socket.destroy().

process.nextTick() ve mikro görevler (promise’lar, queueMicrotask()) arasında ve bir sonraki aşamaya geçmeden veya mevcut aşama tamamlanmadan önce yürütülür. process.nextTick() mikro görevlere göre daha yüksek önceliğe sahiptir.

// Görev planlama örnekleri
console.log('Başlangıç');

setTimeout(() => {
  console.log('Zamanlayıcı 0');
}, 0);

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

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

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

console.log('Bitiş');

// Tipik yürütme sırası (Node.js sürümüne ve yüklemeye bağlı olarak değişebilir):
// Başlangıç
// Bitiş
// nextTick
// Promise
// Zamanlayıcı 0  (timers aşamasında yürütülür)
// setImmediate (check aşamasında yürütülür)

Event Loop, Node.js’in her biri için ayrı bir iş parçacığı oluşturmadan çok sayıda paralel isteği verimli bir şekilde işlemesine olanak tanır, bu da yüksek performans sağlar.