JavaScript'in 'Event Loop' Miti: Aslında Neler Oluyor?

JavaScript'in 'Event Loop' Miti: Aslında Neler Oluyor?

JavaScript'in Event Loop'unun nasıl çalıştığını, call stack, microtask queue ve macrotask queue arasındaki farkları ve yaygın yanlış anlamaları derinlemesine inceliyoruz. Bu yazı, özellikle asenkron programlama ile ilgili net bilgiler arayanlar için ideal

BFS

JavaScript’in Event Loop’uyla tanışmaya hazır mısınız? Peki, bunun etrafındaki mitleri de bir kenara bırakmaya? Bugün, JavaScript dünyasında bir efsane haline gelmiş bu terimi, tüm karmaşasından arındırarak, ne olduğuna ve nasıl çalıştığına dair derinlemesine bir bakış atacağız. Şayet, "Event Loop nedir?" diye soruyorsanız, doğru yerdesiniz. Hazırsanız, başlayalım!

Event Loop Nedir?

JavaScript'in asenkron doğası, geliştiricilerin kafa karıştıran en büyük unsurlarından biridir. Çünkü bir dil olarak JavaScript, tek bir iş parçacığında çalışırken aynı zamanda birden fazla işlemi "asenkron" şekilde gerçekleştirmeye çalışır. Bunu nasıl başarır? İşte burada devreye Event Loop giriyor.

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

Daha derinlemesine incelemeden önce, Call Stack ile Event Loop arasındaki farkı netleştirelim.

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?

JavaScript’in asenkron işlemleri, her ne kadar birbirine paralel olmasa da, belirli bir düzenle çalıştırılır. Burada devreye giren iki önemli kuyruk vardır: Microtask Queue ve Macrotask Queue.

- 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 ve asenkron işlemler arasındaki farkları anlamadan, Event Loop'un tam olarak nasıl çalıştığını kavrayamazsınız.

- 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!

Birçok geliştirici, Event Loop’un paralel işlem yaptığını varsayar. Ancak, bu doğru değildir. Event Loop, tek bir iş parçacığında çalışır, yani her defasında yalnızca bir işlem gerçekleştirir. Bu, aynı anda birden fazla işlem yapmadığı anlamına gelir. Aslında, Event Loop’un görevi sadece işler arasındaki geçişi düzgün ve sırasıyla sağlamak, bu kadar.

Ö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

Event Loop, JavaScript'in dinamik ve güçlü yapısının temel taşlarından biridir. Eğer JavaScript’i daha verimli kullanmak, özellikle asenkron programlamada daha dikkatli olmak istiyorsanız, Event Loop’u anlamak şart.

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!

İlgili Yazılar

Benzer konularda diğer yazılarımız

Karmaşık Veritabanı Yönetiminde Yeni Nesil Çözümler: Mikroservisler ile Veri Bütünlüğü ve Performans Optimizasyonu

Karmaşık Veritabanı Yapılarına Yenilikçi YaklaşımDijital dönüşümün hızla ilerlediği günümüzde, işletmeler daha büyük veri kümeleriyle başa çıkabilmek için sürekli yenilik arayışında. Geleneksel monolitik veritabanı yapıları, zamanla bu büyüyen veriye...

Kodunuzu Temiz Tutun: Yazılımda 'Yavaş Kodu' Tespit Etmenin 7 Etkili Yolu

Yazılım geliştirme dünyasında zamanın ne kadar kıymetli olduğunu hepimiz biliyoruz. Yazdığınız kodun hızlı ve verimli olması, projelerinizi başarılı kılmanın anahtarıdır. Ama ne yazık ki, çoğu zaman kodu hızlı yazmak uğruna temizliği ihmal edebiliriz....

Gizli Hızlandırıcılar: Web Siteniz İçin En İyi JavaScript Performans İpuçları

Web geliştiriciliği, özellikle hız ve performans konusunda sürekli bir yarışa dönüşmüş durumda. Kullanıcılar sabırsızdır, hız önemli, SEO daha da önemli. Her geçen gün daha hızlı, daha verimli web siteleri oluşturmak için yeni yöntemler ve teknikler aranıyor....