Sobes.tech
Middle+

Dart тили жана Flutter чөйрөсүндө Event Loop кандай иштээрин түшүндүрүңүз.

sobes.tech AI

AIден жооп

Dart биротоло иштейт, бирок асинхрондук операцияларды иштетүү үчүн Event Loop колдонулат.

Event Loop эки негизги кезектен турат:

  1. Microtask Queue: Жогорку приоритеттүү, кыска асинхрондук тапшырмалар үчүн. Алар учурдагы операция аяктагандан кийин жана кийинки цикл башталгандан мурун аткарылат.
  2. Event Queue: Чет жактан келген окуялар үчүн (мисалы, I/O, таймерлер, колдонуучунун кириши). Бул кезекке кирген тапшырмалар Microtask Queue бошотулгандан кийин иштетилет.

Иш процесси:

  • Негизги агым синхрондук кодду иштетет.
  • Асинхрондук операцияга (мисалы, Future, Stream, таймер) туш келгенде, ал катталат жана тиешелүү кезекке жөнөтүлөт.
  • Event Loop үзгүлтүксүз Microtask Queue'ни текшерет. Эгер ал бош эмес болсо, анда тапшырмалар толук аяктагына чейин ишке ашырылат.
  • Андан кийин Event Loop Event Queue'ни текшерет. Эгер ал бош эмес болсо, биринчи тапшырманы алып, иштетет.
  • Бул цикл кайра кайталанып турат, эки кезек да бош болуп, күтүүлөр жок болгонго чейин.

Future жана scheduleMicrotask колдонуу мисалы:

void main() {
  print('1. Main башталды');

  // Microtask Queue'га микросапары кошот
  scheduleMicrotask(() {
    print('3. Микросапары ишке ашты');
  });

  // Асынык операция түзөт, ал аяктагандан кийин Event Queue'га кошулат
  Future(() {
    print('4. Future ишке ашты (Event Queue'дан)');
  });

  // Экинчи микросапары кошот
  scheduleMicrotask(() {
    print('5. Экинчи микросапары ишке ашты');
  });

  // Кечиккен Future түзөт, ал дагы Event Queue'га жөнөтүлөт
  Future.delayed(Duration(milliseconds: 10), () {
    print('6. Кечиккен Future ишке ашты (Event Queue'дан)');
  });

  print('2. Main аяктады');
}

// Күтүлгөн аткаруу тартиби:
// 1. Main башталды
// 2. Main аяктады
// 3. Микросапары ишке ашты
// 5. Экинчи микросапары ишке ашты
// 4. Future ишке ашты (Event Queue'дан)
// 6. Кечиккен Future ишке ашты (Event Queue'дан)

Flutter'да Event Loop UI тапшырмаларын (виджеттердин кайра чагылдырылышы), жести иштетүүнү, тармактык суроолорду жана башка асинхрондук операцияларды башкаруу үчүн колдонулат, колдонмонун үзгүлтүксүз иштешин камсыз кылуу үчүн UI блоктогон жок. Flutter үчүн маанилүү тапшырмалар (мисалы, рендеринг үчүн кадрлерди пландаштыруу) көбүнесе Microtask Queue'н колдонуп, жогорку приоритетке жетишет.