client24
@client24

Много соединений socket. Что лучше использовать asyncio или потоки?

Много соединений socket. Что лучше использовать asyncio или потоки?
Есть много TLS соединений
больше 50
нужно всех их слушать
Как это лучше реализовать?
И что лучше для этого использовать?
  • Вопрос задан
  • 820 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
50 - это немного :) Много - это несколько тысяч. Лучше используйте асинхронность вместо многопоточности. В Python это и проще и производительнее в большинстве случаев.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
При использовании одного потока с асинхронной обработкой будет задействовано только одно ядро процессора. При использвании потока на каждый запрос большие дополнительные расходы на создание потоков. Отсюда:
1. Если каждый запрос требует серьезной обработки и грузит процессор - используйте потоки.
2. Если запросы частые, но обработки не требует - используйте асинхронность.
3. Если у вас действительно высокие нагрузки и нужно максимально эффективно использовать ресурсы - используйте приложение с несколькими заранее запущенными потоками (worker'ами) и в каждом из них используйте асинхронность, распределяйте запросы равномерно между воркерами. Количество воркеров должно быть не меньше, чем количество ядер.

P.S. при исользовании любого подхода кроме один запрос - один поток, асинхронность должна быть не только на сокетах, все операции (например работа с файлами) должна быть асинхронными, чтобы не приводить к блокировке потока.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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