Event Loop Nedir?
Bir anlamda, JavaScript’in beynidir. Event Loop, uygulamanızın işlemlerinin doğru sırayla, birbiriyle çakışmadan çalışmasını sağlar. Ama çoğu kişi bu sürecin nasıl işlediğini yanlış anlar. Mesela, Event Loop'un bir "paralel işlem" gibi çalıştığını sananlar var, oysa durum hiç de öyle değil.
Call Stack ve Event Loop Arasındaki Farklar
Call Stack, sırasıyla çalışması gereken tüm fonksiyonları tutan yerdir. Fonksiyon çağrıldığında, bu çağrı stack'e (yığına) eklenir. İşlem bitene kadar orada kalır.
Örneğin, aşağıdaki kodu ele alalım:
function greet() { console.log("Merhaba!"); } greet(); Bu fonksiyon çağrıldığında, "greet" fonksiyonu önce call stack'e eklenir, ardından çalıştırılır ve bitiminde call stack'ten çıkarılır.
Peki, Event Loop bu durumda ne yapar? Event Loop, call stack boşaldığında devreye girer ve sıradaki asenkron işlerin çalışması için callback function'ları Event Queue'ye taşır.
Microtask Queue ve Macrotask Queue: Ne Zaman Çalışır?
- Microtask Queue: Promise'ler gibi "çok öncelikli" görevler buraya eklenir. Event Loop, her macrotask’i işledikten sonra, öncelikle microtask’leri işlemeye başlar. Yani microtask'ler, macrotask'lerin hemen öncesinde işlenir.
- Macrotask Queue: Bu kuyrukta, setTimeout ve setInterval gibi zamanlayıcıları içeren görevler bulunur. Event Loop, microtask queue'dan işlerini hallettikten sonra macrotask queue’daki görevleri işler.
Bu ikisi arasındaki etkileşim, JavaScript'in asenkron işleme mantığını karmaşık hale getirir. Yani, bazen beklediğinizden daha erken veya geç bir şeyler çalışabilir. Bunun nedeni, microtask’lerin her zaman önce işlenmesidir.
Senkron ve Asenkron İşlemler Arasındaki Farklar ve Event Loop Üzerindeki Etkileri
- Senkron işlemler sırasıyla çalışır. Bir işlem bitmeden diğeri başlatılamaz. Yani, her şey sıralı ve düzenlidir.
- Asenkron işlemler ise belirli bir sıraya bağlı kalmaz. Bu işlemler genellikle bir bekleme süresi gerektirir ve tamamlandığında callback’leri çalıştırır. İşte burada Event Loop devreye girer ve sıradaki işlemi yönetir.
Eğer setTimeout kullanarak bir fonksiyon çağırdıysanız, bu fonksiyon asenkron çalışacak ve Macrotask Queue'ya eklenip işlem sırasını bekleyecektir. Oysa, bir Promise varsa, bu iş daha hızlı bir şekilde Microtask Queue'ya alınacaktır.
Yanlış Anlamalar: Event Loop Paralel İşlem Yapmaz!
Örneğin, aşağıdaki kodu göz önünde bulunduralım:
console.log("Başlangıç");
setTimeout(() => console.log("Arka planda çalışıyor..."), 0);
console.log("Bitiş"); Beklediğinizin aksine, "Arka planda çalışıyor..." mesajı hemen çıkmaz. Çünkü setTimeout, bir macrotask’tir ve call stack’teki mevcut işlemler tamamlanmadan önce çalıştırılamaz.
Sonuç: Event Loop’u Anlamak
Bu yazı, size Event Loop’un nasıl çalıştığını net bir şekilde açıklamayı amaçladı. Artık, JavaScript’in çalışma mantığını daha iyi bir şekilde anlayabilir ve performans odaklı geliştirmeler yapabilirsiniz.
Unutmayın, doğru bilgi ve anlayış, kod yazma süreçlerinizi çok daha verimli hale getirebilir!