Sobes.tech
Middle+

Dart tili va Flutter ramkasi kontekstida Event Loop qanday ishlashini tushuntiring.

sobes.tech AI

AIdan javob

Dart bir iplikli (single-threaded) bo‘lsa-da, asinxron operatsiyalarni boshqarish uchun Event Loop dan foydalanadi.

Event Loop ikki asosiy navbatdan iborat:

  1. Microtask Queue: yuqori prioritetli, qisqa asinxron vazifalar uchun. Ular joriy operatsiya tugagach va keyingi Event Loop iteratsiyasidan oldin darhol bajariladi.
  2. Event Queue: tashqi voqealar uchun (masalan, I/O, timerlar, foydalanuvchi kirishi). Bu navbatdagi vazifalar Microtask Queue bo‘sh bo‘lgach bajariladi.

Ishlash jarayoni:

  • Asosiy iplik sinxron kodni bajaradi.
  • Asinxron operatsiya (masalan, Future, Stream, timer) bilan uchrashganda, u ro‘yxatga olinadi va mos navbatga yuboriladi.
  • Event Loop doimiy ravishda Microtask Queue ni tekshiradi. Agar u bo‘sh bo‘lmasa, uning vazifalari to‘liq bajarilguncha bajariladi.
  • Keyin, Event Queue tekshiriladi. Agar bo‘sh bo‘lmasa, birinchi vazifa olinadi va bajariladi.
  • Bu sikl, ikkala navbat ham bo‘shaguncha va asinxron operatsiyalar kutayotgan bo‘lsa davom etadi.

Future va scheduleMicrotask dan foydalanish misoli:

void main() {
  print('1. main boshlanishi');

  // Microtask Queue ga mikro vazifa qo‘shish
  scheduleMicrotask(() {
    print('3. Mikro vazifa bajarilmoqda');
  });

  // Yakunlangandan so‘ng Event Queue ga qo‘shiladigan asinxron operatsiya
  Future(() {
    print('4. Future bajarilmoqda (Event Queue dan)');
  });

  // Boshqa mikro vazifa qo‘shish
  scheduleMicrotask(() {
    print('5. Ikkinchi mikro vazifa bajarilmoqda');
  });

  // Kechiktirilgan Future yaratish, shuningdek, Event Queue ga yuboriladi
  Future.delayed(Duration(milliseconds: 10), () {
    print('6. Kechiktirilgan Future bajarilmoqda (Event Queue dan)');
  });

  print('2. main oxiri');
}

// Kutilyotgan bajarilish tartibi:
// 1. main boshlanishi
// 2. main oxiri
// 3. Mikro vazifa bajarilmoqda
// 5. Ikkinchi mikro vazifa bajarilmoqda
// 4. Future bajarilmoqda (Event Queue dan)
// 6. Kechiktirilgan Future bajarilmoqda (Event Queue dan)

Flutterda, Event Loop UI vazifalarini (widgetlarni qayta chizish), gestlarni boshqarish, tarmoq so‘rovlarini va boshqa asinxron operatsiyalarni boshqaradi, ilovaning silliq ishlashini ta'minlab, UI ni bloklamasdan. Flutterning muhim vazifalari (masalan, render uchun frame rejalashtirish) ko‘pincha Microtask Queue dan foydalanadi, bu yuqori prioritetga erishish uchun.