Thread Starter
#0
Event loop, JavaScript'in asenkron doğasının temel bileşenlerinden biridir ve tarayıcılar ile Node.js gibi ortamlarda etkin bir şekilde çalışır. Bu makalede, event loop'un nasıl çalıştığını, çağrı yığınını (call stack) ve mesaj kuyruğunu (message queue) ele alacağız.
Öncelikle, JavaScript tek iş parçacıklı bir dil olduğundan, yalnızca bir iş parçacığı üzerinde çalışır. Bu, aynı anda yalnızca bir işlem yapılabileceği anlamına gelir. Ancak, JavaScript asenkron işlemleri destekleyerek bu kısıtlamayı aşar. Burada devreye event loop girer.
Event loop, temel olarak iki ana kısmı yönetir: çağrı yığını ve mesaj kuyruğu. Çağrı yığını, yürütülmekte olan işlevlerin sırasını tutar. Bir işlev çağrıldığında, bu işlev yığına eklenir ve tamamlandığında yığından çıkarılır. Ancak, asenkron işlevlerin (örneğin, setTimeout veya AJAX çağrıları) sonuçları, hemen yığına eklenmez; bunun yerine mesaj kuyruğuna gönderilir.
Mesaj kuyruğu, tamamlanan asenkron işlemlerden gelen mesajları tutar. Event loop, çağrı yığınının boş olup olmadığını sürekli kontrol eder. Eğer yığın boşsa, mesaj kuyruğundaki ilk mesaj alınır ve bu mesajın işlevi çağrı yığına eklenir. Bu döngü, tüm program çalışırken devam eder.
Örneğin, aşağıdaki basit kod parçasını ele alalım:
Bu kod çalıştığında, "1" hemen konsola yazdırılır. Ardından, setTimeout fonksiyonu çağrılır ve "2" mesajı mesaj kuyruğuna eklenir. Ancak, "3" hemen ardından konsola yazdırılır. Sonuç olarak, konsolda "1", "3" ve en son "2" yazdırılır. Bu durum, event loop mekanizmasının asenkron işlemleri nasıl yönettiğini gösterir.
Sonuç olarak, event loop, JavaScript'in asenkron işlevselliğini sağlarken, çağrı yığını ve mesaj kuyruğu arasındaki etkileşimi yönetir. Bu mekanizmanın derinlemesine anlaşılması, JavaScript ile daha verimli ve etkili programlar yazmak için önemlidir.
Öncelikle, JavaScript tek iş parçacıklı bir dil olduğundan, yalnızca bir iş parçacığı üzerinde çalışır. Bu, aynı anda yalnızca bir işlem yapılabileceği anlamına gelir. Ancak, JavaScript asenkron işlemleri destekleyerek bu kısıtlamayı aşar. Burada devreye event loop girer.
Event loop, temel olarak iki ana kısmı yönetir: çağrı yığını ve mesaj kuyruğu. Çağrı yığını, yürütülmekte olan işlevlerin sırasını tutar. Bir işlev çağrıldığında, bu işlev yığına eklenir ve tamamlandığında yığından çıkarılır. Ancak, asenkron işlevlerin (örneğin, setTimeout veya AJAX çağrıları) sonuçları, hemen yığına eklenmez; bunun yerine mesaj kuyruğuna gönderilir.
Mesaj kuyruğu, tamamlanan asenkron işlemlerden gelen mesajları tutar. Event loop, çağrı yığınının boş olup olmadığını sürekli kontrol eder. Eğer yığın boşsa, mesaj kuyruğundaki ilk mesaj alınır ve bu mesajın işlevi çağrı yığına eklenir. Bu döngü, tüm program çalışırken devam eder.
Örneğin, aşağıdaki basit kod parçasını ele alalım:
CODE
12345console.log("1");
setTimeout(() => {
console.log("2");
}, 0);
console.log("3");Bu kod çalıştığında, "1" hemen konsola yazdırılır. Ardından, setTimeout fonksiyonu çağrılır ve "2" mesajı mesaj kuyruğuna eklenir. Ancak, "3" hemen ardından konsola yazdırılır. Sonuç olarak, konsolda "1", "3" ve en son "2" yazdırılır. Bu durum, event loop mekanizmasının asenkron işlemleri nasıl yönettiğini gösterir.
Sonuç olarak, event loop, JavaScript'in asenkron işlevselliğini sağlarken, çağrı yığını ve mesaj kuyruğu arasındaki etkileşimi yönetir. Bu mekanizmanın derinlemesine anlaşılması, JavaScript ile daha verimli ve etkili programlar yazmak için önemlidir.