JavaScript'te Message Queue ve Event Loop

JavaScript'in çalışma mantığını anlamak için Message Queue ve Event Loop kavramlarını kavramak önemlidir. Bu kavramlar, asenkron JavaScript kodlarının nasıl işlendiğini ve sıralandığını açıklar.

Message Queue (Mesaj Kuyruğu)

JavaScript çalışma zamanı, sürekli olarak işlenmesi gereken işlemler ve event'ler ile karşılaşır. Bu işlemler, message queue (mesaj kuyruğu) adı verilen bir sıra içinde bekletilir. Her işlem, sıraya eklenir ve sıraya eklenme sırasına uygun olarak sırayla işlenir.

Örneğin, bir setTimeout fonksiyonu çağrıldığında, belirtilen süre sonunda bir işlem sıraya eklenir ve o işlem zamanı geldiğinde sıra ile işlenir.

Event Loop (Olay Döngüsü)

JavaScript çalışma zamanı asenkron bir yapıya sahiptir. Event Loop (Olay Döngüsü) ise JavaScript'in asenkron operasyonlarını nasıl yönettiğini gösteren temel bir mekanizmadır. Event Loop, Call Stack (Çağrı Yığını), Web API ve Callback Queue (Geribildirim Kuyruğu) gibi bileşenleri içerir.

  1. Call Stack (Çağrı Yığını): JavaScript'de işlenen her fonksiyon çağrısı, bir çağrı yığına (call stack) eklenir. Fonksiyon işlendikten sonra çağrı yığınından çıkarılır. Her fonksiyon işlem sırasını bekler.

  2. Web API: Tarayıcıya özgü çeşitli API'lar (setTimeout, XMLHttpRequest, fetch vb.) kullanıldığında, bu işlemler Web API'larına iletilir ve burada işlenir.

  3. Callback Queue (Geribildirim Kuyruğu): Web API'lar tarafından tamamlanan işlemler geribildirim kuyruğuna (callback queue) eklenir.

Event Loop, sürekli olarak Call Stack'i kontrol eder. Eğer Call Stack boşsa ve Callback Queue'da işlem bekliyorsa, geribildirim kuyruğundaki işlemleri Call Stack'e ekleyerek işleme devam eder. Bu şekilde, asenkron işlemler sırayla işlenir ve JavaScript'in asenkron doğası devam ettirilir.

Sonuç

Message Queue ve Event Loop kavramları, JavaScript'in asenkron işleyişini anlamak için temel bir yapı oluşturur. Bu mekanizmalar sayesinde JavaScript, asenkron operasyonları uygun şekilde işleyerek daha verimli bir şekilde çalışır. Event Loop, JavaScript'in tek iş parçacığı (single-thread) yapısında asenkron işlemleri yönetir ve çeşitli işlemleri sırayla işletir.