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: setImmediateNeden?
- Önce tüm senkron kod çalışır.
- 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.
- Sonra event loop aşamalarına geçilir:
setTimeouttimers aşamasında,setImmediatecheck 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
setImmediateher 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.
İlgili Node.js soruları
- cluster modülü ile worker_threads arasındaki fark nedir? Hangisini ne zaman kullanırsınız?
- Node.js event loop'u nasıl çalışır? libuv'nin rolü ve event loop aşamaları nelerdir?
- Node.js'te asenkron kodda hata yönetimi nasıl yapılır? unhandledRejection nedir?
- Node.js'te stream nedir? Türleri nelerdir ve backpressure ne demektir?
- Express.js'te middleware nedir ve nasıl çalışır?
- CommonJS ile ES Modules (ESM) arasındaki fark nedir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.