Ответ
Event Loop — это механизм, который управляет выполнением асинхронного кода в Dart. Он работает в рамках одного изолята (isolate) и обеспечивает неблокирующую обработку операций, таких как ввод-вывод (I/O), таймеры или жесты пользователя.
Основные компоненты и порядок работы:
- Синхронный код: Выполняется сразу и до конца.
- Очередь микрозадач (Microtask Queue): Обрабатывается перед очередью событий. Сюда попадают задачи из
scheduleMicrotask()и завершенияFuture(через.then()илиawait). - Очередь событий (Event Queue): Сюда попадают «внешние» события: таймеры (
Future.delayed), операции ввода-вывода (ответы от сети, чтение файлов), взаимодействия с UI.
Алгоритм Event Loop:
while (true) {
// 1. Выполнить все микрозадачи из очереди микрозадач.
while (microtaskQueue.isNotEmpty) {
microtaskQueue.removeFirst().call();
}
// 2. Если очередь событий не пуста, выполнить одно событие.
if (eventQueue.isNotEmpty) {
eventQueue.removeFirst().call();
}
// 3. Если обе очереди пусты — ожидать новых событий.
}
Практический пример, демонстрирующий порядок:
void main() {
print('1. Синхронный код');
Future(() => print('3. Event Queue (Future)')).then((_) {
print('4. Microtask из .then() предыдущего Future');
});
scheduleMicrotask(() => print('2. Microtask Queue'));
print('5. Снова синхронный код');
}
Вывод будет:
1. Синхронный код
5. Снова синхронный код
2. Microtask Queue
3. Event Queue (Future)
4. Microtask из .then() предыдущего Future
Зачем это важно в Flutter? Понимание Event Loop помогает писать отзывчивые UI-приложения. Длительные синхронные операции «замораживают» интерфейс, потому что блокируют цикл событий. Поэтому тяжелые вычисления нужно выносить в отдельный изолят или разбивать на асинхронные задачи.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶