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 подскажет развёрнутый ответ в реальном времени.