Урок 13: "Основы Dart - асинхронность част первая (Future) + немного теории"

YOUTUBE · 19.11.2025 08:20

Ключевые темы и таймкоды

Введение в асинхронность и многопоточность

0:00
  • Обсуждение сложности темы асинхронности и многопоточности в языке программирования.
  • Упоминание о технологиях, позволяющих работать со временем.
  • План урока: обсуждение фич, генераторов и изолятов.

Основные термины

0:59
  • Объяснение терминов «процесс», «поток» и их различий.
  • Разъяснение, что асинхронный код и многопоточность не являются синонимами.

Процессы и операционная система

1:56
  • Описание работы процессора и операционной системы.
  • Многоядерные процессоры могут выполнять несколько команд одновременно.
  • Операционная система постоянно выполняет множество задач.

Изоляция процессов

3:53
  • Каждый процесс изолирован от других процессов.
  • Процессы используют свои области памяти.
  • Операционка позволяет нескольким процессам выполняться одновременно.

Потоки внутри процессов

5:51
  • Потоки — это последовательность выполнения кода внутри процесса.
  • Потоки могут выполняться параллельно, используя многоядерные процессоры.
  • Пример: два потока могут выполнять расчёт одновременно.

Взаимодействие процессов

6:51
  • Процессы могут обмениваться информацией через команды.
  • Пример взаимодействия: приложение-загрузчик фотографий и приложение-обработчик фотографий.
  • Работа с сетью осуществляется через операционную систему.

Главный поток

9:48
  • В каждой программе есть главный поток, который выполняет основные команды.
  • Без главного потока приложение не работает.
  • После завершения выполнения кода поток умирает вместе с процессом.

Заключение

10:47
  • Подчёркивание важности понимания различий между процессами и потоками.
  • Потоки позволяют выполнять код параллельно, используя многоядерные процессоры.
  • Главный поток — обязательный элемент любой программы.

Многопоточность и асинхронность

11:44
  • Многопоточность позволяет выполнять код в нескольких потоках одновременно.
  • Асинхронность позволяет не ждать завершения задач, например, загрузки файла, и продолжать выполнение кода.
  • Пример: загрузка файла весом 3 ГБ занимает 10 минут, но с асинхронностью приложение может продолжать работу, пока загрузка идёт.

Принцип работы асинхронности

12:42
  • Асинхронность работает в рамках одного потока и позволяет не блокировать выполнение кода.
  • Программа может запросить загрузку файла у операционной системы, но не ждать её завершения.
  • После завершения загрузки операционная система возвращает файл приложению, которое может продолжить обработку.

Применение асинхронности

15:30
  • Асинхронность полезна для длительных операций, таких как загрузка данных из сети или получение геопозиции.
  • Длительные операции часто не имеют смысла ждать, поэтому асинхронность позволяет продолжить выполнение кода.
  • Краткое определение асинхронности: возможность начать выполнение функции, бросить её и продолжить позже.

Класс Future

17:24
  • Класс Future используется для работы с асинхронными операциями.
  • Future содержит действие, которое выполняется в будущем, и принимает значение после завершения.
  • Методы класса Future позволяют откладывать выполнение действий на заданное время.

Методы ожидания

18:24
  • Метод wait() позволяет ждать указанное время, блокируя поток.
  • Метод sleep() создаёт паузу на заданное количество секунд.
  • Блокирующие ожидания могут привести к завершению приложения, если оно не отвечает в течение длительного времени.

Использование Futures

21:19
  • Futures позволяют откладывать выполнение действий без блокировки потока.
  • Futures создают объекты, которые выполняют действие внутри себя и возвращают значение после завершения.
  • Метод await() позволяет ожидать завершения Futures и работать с полученным значением.

Работа с замыканиями

23:17
  • Замыкания позволяют передавать функции между методами.
  • В Futures можно создавать анонимные функции и передавать их в методы.
  • Переданные функции выполняются после завершения действия Futures.

Введение в фьючерсы

24:16
  • Обсуждение создания фьючерса, который будет ждать 10 секунд.
  • Объяснение работы call back: функция, которая выполняется после завершения действия.
  • Пример использования фьючерса с print 4.

Проблемы с параметрами

26:12
  • Обсуждение проблем с аргументами в коде.
  • Устранение ошибок, связанных с аргументами error и invalid.
  • Проверка корректности кода после исправления ошибок.

Асинхронность фьючерсов

28:05
  • Объяснение асинхронного выполнения кода с фьючерсами.
  • Сравнение с использованием slip, который ставит поток на паузу.
  • Подчёркивание важности асинхронности в программировании.

Эксперимент с for

30:02
  • Создание цикла for для загрузки потока работой.
  • Демонстрация того, что поток не может выполнять несколько действий одновременно.
  • Объяснение, почему print 4 не выполняется сразу после for.

Аналогия с приготовлением чая

31:59
  • Аналогия потока с человеком, готовящим чай.
  • Описание ситуаций, когда действия выполняются последовательно или асинхронно.
  • Подчёркивание преимуществ асинхронного выполнения действий.

Чтение файла с использованием фьючерса

35:51
  • Пример чтения файла с компьютера.
  • Использование фьючерса для отложенного выполнения операции чтения файла.
  • Подтверждение корректного чтения файла после использования фьючерса.

Проверка производительности

37:50
  • Демонстрация вывода данных в консоль без блокировки основного процесса.
  • Объяснение, что компьютер может выполнять множество операций параллельно.

Загрузка данных из интернета

38:49
  • Попытка загрузить страницу через HTTP-клиент.
  • Проблемы с созданием URL из строки.

Работа с URL

40:46
  • Использование URLParser для создания URL из строки.
  • Успешное преобразование строки в URL.

Синхронные действия

42:41
  • Объяснение синхронного выполнения действий без блокировки приложения.
  • Важность асинхронного выполнения для эффективной работы.

Методы фьючерсов

43:40
  • Описание методов фьючерсов: error, timeout, complete.
  • Примеры использования методов для обработки ошибок и тайм-аутов.

Работа с несколькими фьючерсами

45:36
  • Создание нескольких фьючерсов с разными задержками.
  • Использование await для ожидания завершения всех фьючерсов.

Пример использования await

47:34
  • Демонстрация работы await с несколькими фьючерсами.
  • Вывод результатов в консоль после завершения всех фьючерсов.

Заключение

49:33
  • Подведение итогов по использованию фьючерсов.
  • Анонс следующего урока о работе с синкавами.