Задать вопрос
anijackich
@anijackich

Чем асинхронность лучше многопоточности для чат-бота?

Чем асинхронность лучше многопоточности для чат-бота? И действительно ли лучше?

Во многих туториалах по написанию чат-ботов (в частности рассматривал написание telegram ботов на python) авторы отдают предпочтение именно асинхронности. Также на форумах часто агитируют перейти с потоков на асинхронность и использовать соответствующие библиотеки по типу aiorgam.

Есть ли какие-то проблемы с потоками, или, может, дело в чем-то другом? Хотелось бы услышать конструктивную критику / опровержение

Заранее спасибо!
  • Вопрос задан
  • 560 просмотров
Подписаться 2 Простой 2 комментария
Решения вопроса 1
mayton2019
@mayton2019
Bigdata Engineer
Насчет чят бота не скажу. Вообще скажу.

Если задача связана с вычислением численных метдов например. Или рендерингом 3D. Или крипто-майнингом. Или нейро-сетей - где
CPU -> 100%, I/O -> 0% то тогда тебе прямая дорого в мультипоточность (мультипроцессность). Количество тредов расчитывается обычно по формуле = количество ядер (иногда АЛУ/Threads) умноженное на коєффициентик. Подбирается экспериментально для конфигурации и среды исполнения. У меня для Java-11 выходило что на 4 ядра Core-i3 надо было 5 вычислительных потоков.

Если в задаче главным дирижёром является канал I/O а нагрузка на расчет малаая (парсер) - то используют технологи асинхронизма. Это когда ваши вычисления подписываются на события I/O и 80% времени ничего не делают а только ждут события от I/O. При благоприятных условиях хендлеры могут потреблять вообще 0% ресурсов. Нет событий. Поэтому таких хендлеров можно поднять очень много. Пример - акторные технологии. Хендлер. Актор. Горутина. Пример 10 000 акторов обслуживается 10 потоками исполнителями.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Kirill-Gorelov
С ума с IT
Так это вообще то для разных задач придумано.

Условно говоря, многопоточность это когда тебе нужно одну задачу сделать максимально быстро, ты запускаешь потоки.

А асинхронность, это когда тебе нужно не ждать когда сложная задача выполниться, а продолжить выполнение основного действия.

Естественно все это можно смешивать.

И именно поэтому и говорят, что лучше асинхронность, что бы не заставлять ждать пользователя.
И это не только в разработке ТГ ботов.
Ответ написан
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Разницы нет под капотом все тот же thread pool. Важно как вы это все готовите.
Ответ написан
solotony
@solotony
покоряю пик Балмера
Какую модель многозадачности - конкурентную (потоки) или кооперативную (асинхронность) лушче применять следует определять для конкретной задачи. С какими библиотеками вы работаете. На сколько хорошо они дружат с потоками или asyncio.

Если ваша программа работает с потоками и нет проблем - так и пусть продолжает работать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы