Middle+
Dart dili və Flutter çərçivəsində Event Loop-un necə işlədiyini izah edin.
sobes.tech Süni İntellekt
AI-dan cavab
Dart tək ipliklidir (single-threaded), lakin asinxron əməliyyatları idarə etmək üçün Event Loop-dan istifadə edir.
Event Loop iki əsas növbədən ibarətdir:
- Microtask Queue: yüksək prioritetli və qısa asinxron tapşırıqlar üçün. Bu tapşırıqlar cari əməliyyat tamamlandıqdan sonra və növbəti Event Loop dövrünə başlamazdan əvvəl dərhal icra olunur.
- Event Queue: xarici hadisələr üçün (məsələn, I/O, timerlər, istifadəçi girişi). Bu növbədəki tapşırıqlar Microtask Queue boşaldıqdan sonra işlənir.
İş prinsipi:
- Əsas iplik sinxron kodu icra edir.
- Asinxron əməliyyat (məsələn,
Future,Stream, timer) ilə rastlaşdıqda, bu qeydiyyata alınır və uyğun növbəyə göndərilir. - Event Loop davamlı olaraq Microtask Queue-ni yoxlayır. Əgər boş deyilsə, onun tapşırıqları tamamlana qədər icra edir.
- Sonra, Event Queue yoxlanır. Əgər boş deyilsə, ilk tapşırıq götürülür və icra olunur.
- Bu dövr, hər iki növbə boşalana və daha çox asinxron əməliyyat gözlənilməyənə qədər davam edir.
Future və scheduleMicrotask istifadə nümunəsi:
void main() {
print('1. Main başlanğıcı');
// Microtask Queue-ya mikro tapşırıq əlavə et
scheduleMicrotask(() {
print('3. Mikro tapşırıq icra olunur');
});
// Bitdikdən sonra Event Queue-ya əlavə olunacaq asinxron əməliyyat yaradın
Future(() {
print('4. Future icra olunur (Event Queue-dən)');
});
// Başqa bir mikro tapşırıq əlavə et
scheduleMicrotask(() {
print('5. İkinci mikro tapşırıq icra olunur');
});
// Gecikmiş Future yaradın, həmçinin Event Queue-ya göndərilir
Future.delayed(Duration(milliseconds: 10), () {
print('6. Gecikmiş Future icra olunur (Event Queue-dən)');
});
print('2. Main sonu');
}
// Gözlənilən icra sırası:
// 1. Main başlanğıcı
// 2. Main sonu
// 3. Mikro tapşırıq icra olunur
// 5. İkinci mikro tapşırıq icra olunur
// 4. Future icra olunur (Event Queue-dən)
// 6. Gecikmiş Future icra olunur (Event Queue-dən)
Flutter-də, Event Loop UI tapşırıqlarını (widgetlərin yenidən çəkilməsi), jestlərin işlənməsini, şəbəkə sorğularını və digər asinxron əməliyyatları idarə edir, tətbiqin səlis işləməsini təmin edir və UI-nin bloklanmamasını təmin edir. Flutter-ın vacib tapşırıqları (məsələn, render üçün kadrların planlaşdırılması) çox vaxt Microtask Queue-dan istifadə edir, bu da daha yüksək prioritet əldə etməyə imkan verir.