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. Төп башланды');
// 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. Төп тәмамланды');
}
// көтелгән үтәү тәртибе:
// 1. Төп башланды
// 2. Төп тәмамланды
// 3. Микросапары үтәлә
// 5. Икенче микросапары үтәлә
// 4. Future үтәлә (Event Queue'дан)
// 6. Кечектерелгән Future үтәлә (Event Queue'дан)
Flutter'да Event Loop UI бурычларын (виджетларны яңадан сызып чыгару, жестларны эшкәртү, челтәр сораулары һәм башка асинхрон операцияләр) башкару өчен идарә итә, кулланмага тоткарлыксыз эшләүне тәэмин итә. Flutter өчен мөһим бурычлар (мәсәлән, рендеринг өчен кадрлар планлаштыру) еш кына Microtask Queue куллана, югарырак приоритетка ирешү өчен.