CodeBlanks Logo Icon CodeBlanks

Event loop

Dart event loop modelini öğrenirsin.

Event loop nedir?

Dart tek iş parçacıklı bir dildir; tüm kod tek bir event loop içinde işlenir. Event loop, sırayla bir görevi alır, çalıştırır, bitmesini bekler, sonra sıradakine geçer.

İki kuyruk vardır: event kuyruğu (Future, I/O, timer) ve microtask kuyruğu (öncelikli). Her turda önce tüm microtask'ler bitirilir, sonra bir event işlenir.

Bu yüzden uzun süren senkron kod event loop'u bloklar. CPU-ağır işler Isolate'e, I/O bekleme Future'a bırakılır.

Event loop'u gözlemlemek

Bir Future, tamamlandığında event kuyruğuna bir görev ekler. await ile beklediğinde o görev işlenene kadar main askıya alınır.

Örnek: print('a'); await Future.delayed(Duration(milliseconds: 1)); print('b');. 'a' hemen yazdırılır, sonra 1 ms'lik event beklenir, en son 'b' yazdırılır.

Bu sıralama deterministiktir: event loop tek parçacıklı olduğu için çıktı her zaman aynıdır.

Uygulama Event loop sırasını gözle

main'i async yap. Önce print('a'), sonra await Future.delayed(Duration(milliseconds: 1)), en son print('b') ekle.

Başlangıç kodu

main.dart
void main() {
  // async yap; 'a' yazdır; 1 ms bekle; 'b' yazdır
}

Örnek çözüm

main.dart
void main() async {
  print('a');
  await Future.delayed(Duration(milliseconds: 1));
  print('b');
}

Beklenen çıktı

a
b

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Event loop hakkında hangisi doğrudur?

  • Birden çok iş parçacığı paralel çalışır
  • Microtask'ler event'ten sonra işlenir
  • Önce microtask'ler, sonra event işlenir Doğru cevap
  • Senkron kod loop'u bloklamaz

Açıklama: her turda önce tüm microtask'ler bitirilir, sonra bir event işlenir.

2 Event loop kuyrukları

Soru
Önce ____ kuyruğu, sonra event kuyruğu işlenir.
Cevap
Önce microtask kuyruğu, sonra event kuyruğu işlenir.

Açıklama: microtask kuyruğu önceliklidir.

3 Loop parçalarını eşleştir

Kavram Anlamı
Event loop Tek iş parçacığı
Event kuyruğu Future / I/O
Microtask Öncelikli görev
await Bekleme noktası

İleri seviye bölümündeki tüm dersler