process.nextTick, Promise.then, setImmediate ve setTimeout(fn, 0) hangi sırayla çalışır?

Cevap

console.log("1: senkron");

setTimeout(() => console.log("5: setTimeout"), 0);
setImmediate(() => console.log("6: setImmediate"));

Promise.resolve().then(() => console.log("4: promise"));
process.nextTick(() => console.log("3: nextTick"));

console.log("2: senkron");

Çıktı (ana modülde):

1: senkron
2: senkron
3: nextTick
4: promise
5: setTimeout
6: setImmediate

Neden?

  1. Önce tüm senkron kod çalışır.
  2. Mevcut işlem biter bitmez nextTick kuyruğu, ardından Promise (microtask) kuyruğu boşaltılır. Bu iki kuyruk, event loop'un her aşama geçişinde ve her callback sonrasında tekrar kontrol edilir.
  3. Sonra event loop aşamalarına geçilir: setTimeout timers aşamasında, setImmediate check aşamasında çalışır.

setTimeout(0) mı, setImmediate mi önce?

  • Ana modülden çağrıldığında sıra garanti değildir; loop'un başlama süresine bağlıdır (timeout en az 1 ms'dir).
  • Bir I/O callback'i içinden çağrıldığında setImmediate her zaman önce çalışır, çünkü poll aşamasından sonra doğrudan check aşaması gelir.
fs.readFile(__filename, () => {
  setTimeout(() => console.log("timeout"), 0);
  setImmediate(() => console.log("immediate")); // her zaman önce
});

Pratik uyarı

process.nextTick özyinelemeli çağrılırsa event loop bir sonraki aşamaya hiç geçemez ve I/O aç kalır (starvation). Node dokümantasyonu çoğu durumda setImmediate veya queueMicrotask kullanılmasını önerir.

  1. cluster modülü ile worker_threads arasındaki fark nedir? Hangisini ne zaman kullanırsınız?ZorNode.jsBackend
  2. Node.js event loop'u nasıl çalışır? libuv'nin rolü ve event loop aşamaları nelerdir?ZorNode.jsBackend
  3. Node.js'te asenkron kodda hata yönetimi nasıl yapılır? unhandledRejection nedir?OrtaNode.jsBackend
  4. Node.js'te stream nedir? Türleri nelerdir ve backpressure ne demektir?OrtaNode.jsBackend
  5. Express.js'te middleware nedir ve nasıl çalışır?KolayNode.jsBackend
  6. CommonJS ile ES Modules (ESM) arasındaki fark nedir?KolayNode.jsBackend

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle