Event loop
- Dart kursu
- İleri seviye
- Ders 7/83
- 5 dk
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
void main() {
// async yap; 'a' yazdır; 1 ms bekle; 'b' yazdır
}Örnek çözüm
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ı
Önce ____ kuyruğu, sonra event kuyruğu işlenir.
Ö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ı |