Асинхронность и `asyncio`
Python
Senior
Яндекс
Объясните разницу между потоками (`threading`) и кооперативной асинхронностью (`asyncio`). Как работает event loop и зачем нужны `await` и `async`?
Ответы
Asyncio и event loop
`asyncio` реализует кооперативную многозадачность: одна OS-нить выполняет множество корутин, которые добровольно уступают управление через `await`.
Event loop — цикл событий, который:
- планирует задачи (coroutines) и callbacks,
- отслеживает готовность I/O (через epoll/kqueue/IOCP),
- возобновляет корутины, когда данные готовы.
`async def` объявляет корутину, а `await` приостанавливает её выполнение до получения результата awaitable-объекта. В отличие от потоков, переключение задач контролируемое и дешёвое, но только для I/O-bound работы.