JavaScript Olay Döngüsü: Engellemeyen Asenkron Yürütme

JavaScript olay döngüsü, çağrı yığını boş olduğunda bir kuyruktan geri çağırmaları çalıştırarak asenkron işlemleri yönetir ve iş parçacığı engellemesini önler.

The event loop is a fundamental process in JavaScript's runtime environments (browsers, Node.js) that enables non-blocking asynchronous behavior. Since JavaScript is single-threaded, it can execute only one operation at a time. Without the event loop, long-running tasks (e.g., network requests, timers) would halt the main thread, leading to an unresponsive application. The event loop operates alongside the call stack, browser Web APIs (or Node.js APIs), and a task queue (or callback queue). When an asynchronous task is initiated, it's delegated to the appropriate API. Upon completion, its associated callback function is placed in the task queue. The event loop continuously checks if the call stack is clear. If it is, it dequeues the oldest callback from the task queue and pushes it onto the call stack for execution. This cycle ensures that asynchronous operations are handled efficiently without blocking the primary thread.

        graph LR
  Center["JavaScript Olay Döngüsü: Engellemeyen Asenkron Yürütme"]:::main
  classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
  classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
  classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
  classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
  linkStyle default stroke:#4b5563,stroke-width:2px;

      

🧒 5 yaşındaki gibi açıkla

[JavaScript](/tr/terms/javascript)'i aynı anda yalnızca bir iş yapabilen bir şef gibi düşünün. Bir pasta pişirmesi gerekiyorsa (uzun bir görev), sadece orada durup beklemez. Pastayı fırına koyar ve bir zamanlayıcı ayarlar, sonra hemen bir salata hazırlamaya başlar (başka bir görev). Fırın zamanlayıcısı çaldığında, şef salatayı bitirir, pastayı çıkarır ve sonra başka bir işe geçer. Olay döngüsü, şefin bu 'bekleyen' görevleri yönetme sistemi gibidir, diğer işleri durdurmadan hazır olduklarında halledilmelerini sağlar.

🤓 Expert Deep Dive

JavaScript olay döngüsü, kod, görev ve olayların yürütülmesini düzenleyen bir eşzamanlılık modelidir. Çağrı yığınını ve görev kuyruğunu (veya kuyruklarını) sürekli olarak izler. Senkron kod doğrudan çağrı yığınında yürütülür. Asenkron işlemler (örneğin, setTimeout, Promises, I/O) yürütmelerini yöneten ana bilgisayar ortamının API'lerine devredilir. Bir asenkron işlem tamamlandığında, geri çağırma fonksiyonu (veya bir Promise'in çözümleyicisi) ilgili bir kuyruğa yerleştirilir: görev kuyruğu (setTimeout, DOM olayları gibi makro görevler için) veya mikro görev kuyruğu (Promises, queueMicrotask gibi mikro görevler için). Olay döngüsünün temel işlevi, çağrı yığını boş olduğunda görevleri kuyruktan çıkarmak ve yürütmektir. Mikro görevler genellikle makro görevlerden önce işlenir. Özellikle, mevcut makro görev tamamlandıktan sonra ve bir sonraki makro görev başlamadan önce, olay döngüsü mevcut tüm mikro görevleri yürütecektir. Bu, gecikmiş olanlara göre anında geri çağırmaları (Promise çözümleri gibi) önceliklendirerek, farklı JavaScript ortamlarında yanıt verme yeteneğini ve asenkron işlemlerin verimli bir şekilde işlenmesini sağlar.

📚 Kaynaklar