Sobes.tech
Middle+

Dart dili ve Flutter çerçevesi bağlamında Event Loop'un nasıl çalıştığını açıklayın.

sobes.tech yapay zeka

AI'dan gelen yanıt

Dart tek iş parçacıklı (single-threaded) olmasına rağmen, asenkron işlemleri yönetmek için Event Loop kullanır.

Event Loop iki ana kuyudan oluşur:

  1. Microtask Queue: Yüksek öncelikli ve kısa süren asenkron görevler içindir. Bu görevler, mevcut işlemin tamamlanmasının hemen ardından ve bir sonraki Event Loop döngüsüne başlamadan önce çalıştırılır.
  2. Event Queue: Dış olaylar (örneğin, I/O, zamanlayıcılar, kullanıcı girişi) içindir. Bu kuyruktaki görevler, Microtask Queue boşaldıktan sonra işlenir.

Çalışma süreci:

  • Ana iş parçacığı senkron kodu çalıştırır.
  • Bir asenkron işlem (örneğin, Future, Stream, zamanlayıcı) ile karşılaşıldığında, bu işlem kaydedilir ve uygun kuyruğa eklenir.
  • Event Loop sürekli olarak Microtask Queue'yu kontrol eder. Eğer boş değilse, içindeki görevler tamamlanana kadar çalıştırılır.
  • Daha sonra, Event Queue kontrol edilir. Boş değilse, ilk görev alınır ve çalıştırılır.
  • Bu döngü, her iki kuyruk de boşalana ve daha fazla asenkron işlem beklenmeyene kadar devam eder.

Future ve scheduleMicrotask kullanımı örneği:

void main() {
  print('1. main başlangıcı');

  // Microtask Queue'ya mikro görev ekle
  scheduleMicrotask(() {
    print('3. Mikro görev çalışıyor');
  });

  // Tamamlandığında Event Queue'ya eklenecek asenkron işlem oluştur
  Future(() {
    print('4. Future çalışıyor (Event Queue)');
  });

  // Başka bir microtask ekle
  scheduleMicrotask(() {
    print('5. İkinci mikro görev çalışıyor');
  });

  // Gecikmeli Future oluştur, aynı zamanda Event Queue'ya gönderilir
  Future.delayed(Duration(milliseconds: 10), () {
    print('6. Gecikmeli Future çalışıyor (Event Queue)');
  });

  print('2. main sonu');
}

// Beklenen çalışma sırası:
// 1. main başlangıcı
// 2. main sonu
// 3. Mikro görev çalışıyor
// 5. İkinci mikro görev çalışıyor
// 4. Future çalışıyor (Event Queue)
// 6. Gecikmeli Future çalışıyor (Event Queue)

Flutter'da, Event Loop UI görevlerinin (widget'ların yeniden çizimi), dokunma olaylarının, ağ isteklerinin ve diğer asenkron işlemlerin yürütülmesini yönetir, böylece uygulama akıcı çalışır ve UI engellenmez. Flutter'daki önemli görevler (örneğin, render için frame planlama) genellikle Microtask Queue kullanır, böylece daha yüksek öncelik sağlar.