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

  1. 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.
  2. 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.

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