Sobes.tech
Middle+

Ներկայացրեք, թե ինչպես է աշխատում Event Loop-ը Dart լեզվի և Flutter ֆրեյմվորկի համատեքստում։

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-ին Microtask Queue-ում
  scheduleMicrotask(() {
    print('3. Microtask կատարվում է');
  });

  // Ստեղծում է ասինխրոն օպերացիա, որը կավելացվի Event Queue-ին ավարտից հետո
  Future(() {
    print('4. Future կատարվում է (զրոյական հերթից)');
  });

  // Ավելացնում է microtask-ին Microtask Queue-ում
  scheduleMicrotask(() {
    print('5. Երկրորդ microtask կատարվում է');
  });

  // Ստեղծում է Delayed Future, որը նույնպես կուղարկվի Event Queue-ին
  Future.delayed(Duration(milliseconds: 10), () {
    print('6. Ուղղված Future կատարվում է (զրոյական հերթից)');
  });

  print('2. Սկիզբ վերջ');
}

// Ապահովված հերթականությունը՝
// 1. Սկիզբ main
// 2. Սկիզբ վերջ
// 3. Microtask կատարվում է
// 5. Երկրորդ microtask կատարվում է
// 4. Future կատարվում է (զրոյական հերթից)
// 6. Ուղղված Future կատարվում է (զրոյական հերթից)

Flutter-ում Event Loop-ը կառավարում է UI առաջադրանքների կատարմանը (widget-ների վերաներկում), ժեստերի մշակմանը, ցանցային հարցումներին և այլ ասինխրոն օպերացիաներին՝ ապահովելով հարթ աշխատանք առանց UI-ի բլոկավորման։ Flutter-ի կարևոր առաջադրանքները (օրինակ՝ ռենդերինգի համար ֆրեյմի պլանավորումը) հաճախ օգտագործում են Microtask Queue՝ բարձր առաջնահերթություն հասնելու համար։