METABYTE
К списку статей

Асинхронность и конкурентность: не путайте тёплое с мягким (и не бегите в прод)

Разбираемся, почему async/await не равно многопоточность, и как при этом не устроить апокалипсис своему коду.

10 мая 20262 мин чтения
Асинхронность и конкурентность: не путайте тёплое с мягким (и не бегите в прод)

Одна из самых популярных IT-заблуждений — считать, что асинхронность и конкурентность — это одно и то же. Мол, поставил async/await — и готово, код бежит параллельно как угорелый. Спойлер: нет. Это как думать, что если ты включил кофеварку и тостер одновременно, то завтрак готовится в два раза быстрее. На деле просто растёт счёт за электричество.

На самом деле асинхронность — это про то, как не ждать у моря погоды (читай: I/O), а заняться чем-то полезным, пока данные не пришли. Конкурентность же — про то, как выполнять несколько задач одновременно, если у вас есть несколько ядер или хотя бы иллюзия этого за счёт переключения контекста. Смешивать эти концепции — верный способ получить баги, которые воспроизводятся только в пятницу вечером.

В статье наглядно показывают, что асинхронные функции могут выполняться последовательно, если вы не используете конкурентные механизмы (например, asyncio.gather). И наоборот, конкурентность без асинхронности возможна через потоки, но с риском гонок данных и блокировок. Если ваш код завис при ожидании сети, то никакой asyncio.run вам не поможет, если вы забыли сделать await.

Что делать разработчику?

  • Понимать разницу: асинхронность — это структура программы, конкурентность — это исполнение.
  • Не злоупотреблять async: если у вас CPU-bound задача, async не даст прироста, только головную боль.
  • Использовать правильные инструменты: для I/O — asyncio, для CPU — multiprocessing или потоки.

Комментарий студии METABYTE: Мы тоже когда-то думали, что async волшебным образом ускорит любой код. Теперь знаем: чтобы не перепутать кофеварку с тостером, лучше доверить проектирование архитектуры профессионалам. Напишите нам, если хотите, чтобы ваш код не зависал, а не просто делал вид.

СЛЕДУЮЩИЙ ШАГ

Понравилось как мыслим?

Применяем те же принципы в клиентских проектах: AI, автоматизации, продукты, которые не умирают после релиза.