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:
- 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.
- 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.