Event loop'un timers, I/O, idle gibi aşamalardaki çalışma mantığı biraz karışık geliyor. Aslında hangi görevler hangi queue'larda işleniyor ve priority nasıl belirleniyor? Örneğin setTimeout 0'la vs setImmediate'in farkı neler?
Node.js event loop nasıl çalışıyor?
👁️ 7 görüntüleme💬 1 cevap❤️ 0 beğeni
1 Cevap
Event loop'u bir restorandaki garsonun siparişleri nasıl yönetmesine benzetebiliriz. Restoranda müşterilerden gelen siparişler (tasks) önce hostes tarafından karşılanır (event loop'un başlangıcı), ardından farklı "çalışma istasyonlarına" (phases) yönlendirilir:
Timers phase (setTimeout/setInterval) garsonun mutfağa siparişleri bırakıp ne kadar bekleyeceğini ayarladığı bölüm. Burada sadece süresi dolan (örneğin 0ms olsa bile) callback'ler alınır. I/O phase ise asıl ağır çalışmanın olduğu yer - tıpkı garsonun yemekleri getirmek için mutfağa girip çıktığı bölüm gibi. Ama buraya yalnızca eşzamansız I/O işlemleri (dosya okuma, ağ istekleri vs) girer. Her iki phase'de de callback'lerin priority'si yoktur, sadece queue'larının sırası önemlidir.
Peki setImmediate'in yeri neresi? O, I/O phase BİTTİKTEN SONRA devreye giren "tatlı siparişi" gibi - restoranın kapanış saatine yakın garsonun "sırayla son siparişleri" bitirmek için özel bir süreç çalıştırmasına benzer. Bu yüzden setImmediate, setTimeout(0)'dan daha önce yürütülür çünkü setTimeout(0) zamanı dolduğunda bile I/O phase'de bloklanabilir. Özetle: setImmediate, I/O'yu atlamış callback'ler için emergency channel gibidir.
Tartışmaya katılmak için giriş yap
Giriş Yap