Node.js'de Close Queue
admin

Node.js, asenkron işlemleri verimli bir şekilde yönetmek için event-driven (olay güdümlü) bir mimari kullanır. Bu mimarinin temel taşlarından biri olan Event Loop, Node.js'nin senkron ve asenkron kodları koordine etmesini sağlar. Bu makalede, Event Loop'un son adımı olan Close Queue ve onun çalışma prensipleri detaylı bir şekilde ele alınacaktır.
Event Loop Nedir?
Event Loop, Node.js'nin kalbidir ve JavaScript motorunun senkron ve asenkron işlemleri yönetmesini sağlar. Event Loop, altı ana kuyruktan (queue) oluşur:
- Next Tick Queue:
process.nextTickile kuyruklanan callback'ler burada yer alır.- Promise Queue: Promise'lerin resolve veya reject edilmesiyle kuyruklanan callback'ler burada yer alır.
- Timer Queue:
setTimeoutvesetIntervalile kuyruklanan callback'ler burada yer alır. - IO Queue: Asenkron IO operasyonları tamamlandığında kuyruklanan callback'ler burada yer alır.
- Check Queue:
setImmediateile kuyruklanan callback'ler burada yer alır. - Close Queue: Close event'leri ile kuyruklanan callback'ler burada yer alır.
Close Queue
Close Queue, bir kaynak (örneğin bir dosya veya ağ bağlantısı) kapandığında tetiklenen callback fonksiyonlarının kuyruklandığı yerdir. Close Queue'nun en önemli özelliklerinden biri, diğer tüm kuyruklar boşaldıktan sonra çalıştırılmasıdır. Bu, kaynakların temizlenmesi ve kapanma işlemlerinin diğer tüm işlemler tamamlandıktan sonra yapılmasını sağlar.
Close Queue'nun Kullanımı
Bir örnekle Close Queue'nun nasıl çalıştığını inceleyelim. Aşağıdaki kod, bir readable stream oluşturur, bu stream'i kapatır ve close event'ini dinler.
const fs = require("fs"); // Readable stream oluşturuluyor const readableStream = fs.createReadStream(__filename); // Stream kapatılıyor readableStream.close(); // Close event dinleniyor readableStream.on("close", () => { console.log("readableStream close event callback"); }); // Diğer asenkron metotlar setImmediate(() => console.log("setImmediate 1")); setTimeout(() => console.log("setTimeout 1"), 0); Promise.resolve().then(() => console.log("Promise.resolve 1")); process.nextTick(() => console.log("process.nextTick 1"));
Bu kod çalıştırıldığında, aşağıdaki çıktı elde edilir:
process.nextTick callbackPromise.resolve callbacksetTimeout callbacksetImmediate callbackreadable stream close event callback
Bu çıktıya göre, Close Queue'daki callback'ler diğer tüm kuyruklar boşaldıktan sonra çalıştırılır.
close queue gifEvent Loop ve Kuyrukların Yürütülme Sırası
Event Loop, her döngüsünde aşağıdaki adımları izler:
- Call Stack'in Boşaltılması: İlk olarak, call stack'teki tüm senkron kodlar çalıştırılır.
- Next Tick Queue:
process.nextTickile kuyruklanan callback'ler çalıştırılır. - Promise Queue: Promise'lerin resolve veya reject edilmesiyle kuyruklanan callback'ler çalıştırılır.
- Timer Queue:
setTimeoutvesetIntervalile kuyruklanan callback'ler çalıştırılır. - IO Queue: Asenkron IO operasyonları tamamlandığında kuyruklanan callback'ler çalıştırılır.
- Check Queue:
setImmediateile kuyruklanan callback'ler çalıştırılır. - Close Queue: Close event'leri ile kuyruklanan callback'ler çalıştırılır.
- Next Tick Queue:
Event Loop'un Çalışma Mantığı
Event Loop, Node.js'nin senkron ve asenkron işlemleri koordine etmesini sağlar. Her bir kuyruk, belirli türdeki asenkron işlemler için kullanılır ve bu kuyruklar belirli bir sırayla işlenir. Örneğin, process.nextTick ve Promise callback'leri her bir kuyruk ve callback yürütme arasında çalıştırılır, bu da onların diğer asenkron işlemlerden önce çalıştırılmasını sağlar.
Sonuç
Node.js Event Loop, senkron ve asenkron kodların verimli bir şekilde çalıştırılmasını sağlayan karmaşık fakat güçlü bir yapıdır. Close Queue, kaynakların kapanma işlemlerinin diğer tüm işlemler tamamlandıktan sonra yapılmasını sağlayarak, kaynak yönetimini daha verimli hale getirir. Bu makalede, Event Loop'un çalışma prensipleri ve Close Queue'nun nasıl çalıştığı detaylı bir şekilde ele alınmıştır. Node.js geliştiricileri için bu bilgilerin anlaşılması, asenkron kodların daha verimli ve etkili bir şekilde yazılmasına yardımcı olacaktır.






