Middle+
Ներկայացրեք, թե ինչպես է աշխատում Event Loop-ը Dart լեզվի և Flutter ֆրեյմվորկի համատեքստում։
sobes.tech AI
Պատասխան AI-ից
Dart միակամյա է, բայց օգտագործում է Event Loop՝ ասինխրոն օպերացիաների մշակման համար:
Event Loop-ը բաղկացած է երկու հիմնական հերթերից.
- Microtask Queue՝ բարձր առաջնահերթությամբ, կարճ ասինխրոն առաջադրանքների համար։ Դրանք կատարվում են անմիջապես ընթացիկ օպերացիայի ավարտից հետո և հաջորդ հերթարկության սկզբից առաջ։
- 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՝ բարձր առաջնահերթություն հասնելու համար։