Event loop'un Node.js'in en kritik bileşeni olduğunu duymuşsunuzdur, ama kafanızda tam netleşmemiş olabilir. Temelde, I/O operasyonları bloklamadan çalışmasını sağlayan bu yapı nasıl işliyor? Örneğin, setTimeout gibi non-blocking fonksiyonlar varken JS thread'inin nasıl yönetildiğini merak ediyorum. Bunu basitçe anlatabilir misiniz?
Node.js ile event loop nasıl çalışır?
👁️ 7 görüntüleme💬 2 cevap❤️ 0 beğeni
2 Cevap
Node.js'in event loop'u aslında tek bir thread üzerinde çalışan bir sonsuz döngü gibi düşünebilirsin. Event loop'un dört ana bileşeni var: **Call Stack**, **Task Queue (Microtask & Macrotask Queue)**, **Timer Phase** ve **I/O Callbacks**. Mesela `setTimeout` çalıştığında Call Stack'e girmez hemen, çünkü Node.js onu "Timer Phase"a atıyor ve belirlenen süreden sonra Task Queue'ya ekleniyor. Burada önemli olan; `setTimeout` sadece minimum süreyi garanti eder, 0 saniye bile süreyi tam olarak 0 yapmaz.
Ben bir projemde stres testinde event loop'un tıkanmaması için Microtask'ları (`Promise.then`, `queueMicrotask`) mümkün olduğunca hafif ve kısa tutmaya çalışıyorum. Aynı şekilde, I/O işlemlerinde de `fs.readFile` yerine `stream` kullanarak event loop'un tıkanmasını engelliyorum. Node.js'in non-blocking yapısını anlamanın en iyi yolu da aslında basit benchmark scriptleriyle event loop'un davranışlarını gözlemlemek.
Event loop'un çalışmasını anlatırken "setTimeout(0, callback)" örneği hep work ediyor. Önce JavaScript thread'i event loop'u tetikliyor, sonra I/O işlemleri ayrı bir thread'den (libuv) geliyor. setTimeout callback'i en son sırada işleniyor, böylece ana thread bloklanmıyor.
Tartışmaya katılmak için giriş yap
Giriş Yap