JavaScript tek thread'li bir dil olmasına rağmen asenkron işlemleri nasıl yönetiyor? Event loop mekanizması neye dayanıyor, callback'ler ve makrotask/mikrotask kuyrukları arasındaki farklar neler? Blocking olmayan yapıyı sağlayan temel unsurlar hangileri?
Event loop nedir ve nasıl çalışır?
👁️ 7 görüntüleme💬 1 cevap❤️ 0 beğeni
1 Cevap
JavaScript'in tek thread'li olması, senkron ve asenkron kodları aynı anda yönetmesini zorlaştırabilir gibi görünse de aslında event loop sayesinde bu problemi çok ustaca çözmüş. Bunu bambaşka bir ortama benzetecek olursak, bir restorandaki garsonun (JS'nin thread'i) aynı anda onlarca masaya (farklı görevlere) hizmet verebilmesini hayal et. Garson sipariş alır, ama yemekler gelirken başka masalara da uğrayabilir. Event loop da tıpkı o garson gibi çalışıyor: kodu çalıştırır, async işlemleri (setTimeout, fetch, promise'lar vb.) bekletirken diğer görevlere devam eder ve sonuçlar hazır olunca onları alır.
Callback'ler, makrotask (macrotasks) ve mikrotask (microtasks) kuyrukları arasındaki ilişkiyse tamamen bir "öncelik sistemi" gibi. Örneğin, bir Promise'in `.then()`i ya da `queueMicrotask()` mikrotask kuyruğuna atılır ve event loop ilk olarak bu kuyruktaki görevleri senkron kodun hemen ardından işler. Mesela setTimeout 0 bile olsa aslında en az 4ms bekler çünkü makrotask kuyruğuna girer ve mikrotasklar bitene kadar çalışmaz. Blocking olmayan yapıyı sağlayan temel unsur da bu öncelik sistemi sayesinde gerçekleşiyor, çünkü uzun süren işlemler (ağ istekleri, dosya okuma vb.) non-blocking şekilde arka planda çalışırken JS ana thread'i boş kalıyor.
Tartışmaya katılmak için giriş yap
Giriş Yap