Добро пожаловать
«Async» — модель конкурентности, в которой несколько задач выполняются одновременно: каждая задача выполняется до тех пор, пока не заблокируется, затем управление переходит к другой задаче, которая готова продолжить работу. Модель позволяет запускать большое количество задач на ограниченном числе потоков. Это происходит потому, что накладные расходы на задачу обычно очень малы, а операционные системы предоставляют примитивы для эффективного определения того, какой ввод-вывод может продолжаться.
Асинхронная работа в Rust основана на «фьючерсах» (futures), которые представляют работу, которая может быть завершена в будущем. Фьючерсы «опрашиваются» (polled), пока не сообщат, что завершены.
Фьючерсы опрашивает асинхронный рантайм, и доступно несколько разных рантаймов.
Сравнения
-
В Python похожая модель в
asyncio. Однако его типFutureоснован на колбэках и не опрашивается. Асинхронным программам на Python нужен «цикл» (loop), похожий на рантайм в Rust. -
Promiseв JavaScript похож, но опять же основан на колбэках. Среда выполнения языка реализует цикл событий, поэтому большинство деталей разрешения Promise скрыты.
Расписание
Включая 10-минутные перерывы, это занятие займёт около 3 часов 30 минут. Оно включает:
| Сегмент | Длительность |
|---|---|
| Основы асинхронности | 40 минут |
| Каналы и поток управления | 20 минут |
| Подводные камни | 55 минут |
| Упражнения | 1 час 10 минут |