Почему реализация асинхронности через asyncio быстрее потоков
Python
Junior
Без компании
Почему реализация асинхронности через asyncio быстрее потоков
Ответы
Asyncio эффективнее потоков для I/O-bound задач благодаря кооперативной многозадачности. В отличие от потоков, где ОС переключает контекст, asyncio использует event loop и корутины, которые добровольно отдают контроль при await. Это устраняет накладные расходы на:
- Переключение контекста (в потоках ~1-15 мкс)
- GIL contention (потоки в Python не работают параллельно из-за GIL)
- Потребление памяти (каждый поток ~8MB стек)
Пример:
```
import asyncio
async def fetch(url):
print(f"Start {url}")
await asyncio.sleep(1) # Имитация I/O
print(f"Done {url}")
async def main():
await asyncio.gather(
fetch("url1"),
fetch("url2") # Выполнятся конкурентно в 1 потоке
)
asyncio.run(main())
```
Для CPU-bound задач лучше использовать multiprocessing.