Middle+
Обяснете как работи Event Loop в контекста на езика Dart и фреймуърка Flutter.
sobes.tech AI
Отговор от AI
Dart е еднопоточен (single-threaded), но използва Event Loop за управление на асинхронните операции.
Event Loop се състои от две основни опашки:
- Microtask Queue: за задачи с висок приоритет и кратки асинхронни задачи. Те се изпълняват веднага след завършването на текущата операция и преди започването на следващата итерация на Event Loop.
- Event Queue: за външни събития (като I/O, таймери, въвеждане от потребителя). Задачите от тази опашка се обработват след като Microtask Queue стане празна.
Процес на работа:
- Основният нишка изпълнява синхронен код.
- Когато срещне асинхронна операция (например,
Future,Stream, таймер), тя се регистрира и се изпраща към съответната опашка. - Event Loop постоянно проверява Microtask Queue. Ако не е празна, изпълнява задачите ѝ, докато не стане празна.
- След това проверява 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)