Hardasyncthreading
Чем async/await от threading отличается?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
async/await (asyncio) — кооперативная многозадачность в одном потоке. Корутины уступают управление в точках await. Threading — preemptive через потоки ОС.
# async/await — тысячи connections, низкий overhead
async def handle_clients():
await asyncio.gather(*[serve(c) for c in clients])
# threading — работает с legacy sync кодом
from threading import Thread
Thread(target=sync_blocking_io).start() async/await threading multiprocessing
модель 1 поток, coop потоки ОС процессы ОС
overhead очень низкий ~1MB/поток высокий
конкурентность тысячи сотни десятки
CPU-bound НЕ ускоряет* НЕ ускоряет* ускоряет
гонки данных нет (1 поток) есть нет- *GIL отпускается в I/O, поэтому threading работает для I/O, но не для CPU;
- async/await — для I/O-heavy серверов (high concurrency);
- threading — для умеренной concurrency с legacy кодом;
- multiprocessing — для CPU-bound;
- Веб-фреймворки: Flask/Django sync, FastAPI/aiohttp async.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.