Eugene-Usachev
@Eugene-Usachev

Может ли приложение слушать несколько портов?

Допустим у меня есть компьютер с n ядер. Я хочу использовать их как можно эффективнее. Могу ли я прослушивать n портов?

Вопрос стоит не в том, способен ли я. Вопрос в том, нет ли здесь каких-нибудь подводных камней для пользователей (например, нельзя развернуть такое приложение, или к нему сложно подключиться)?
  • Вопрос задан
  • 291 просмотр
Решения вопроса 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Может! Проблем никаких нет. Можно разнести воркеры и привязать их к конкретным ядрам, но все зависит от модели и дизайна вашего ПО.
Емли в линуксе, испольщуйте треды и epool.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
@Everything_is_bad
Не понятно какая связь между ядрами и портами? компьютер с один ядром может слушать N портов, компьютер с N ядрами так же может слушать N портов. Эффективность вообще тут боком, а для ее измерения минимум нужно установить критерий по которому ее фиксируем.
ЗЫ взять тот же event loop в питоновском asyncio (на самом деле в остальных языках тоже дофига подобного), он без проблем может держать и обрабатывать 10к коннектов на одному порту, на одном процессе (считай ядре), но если кривыми руками там вызвать тяжелый синхронный код, то всё.
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Компьютерные сети
software engineer
Приложение может слушать сколько угодно портов.
Можно даже один порт слушать двумя приложениями, есть даже такой вариант, но он редко используется.

Но вот совершенно не обязательно разбивать листенеры по ядрам - в большинстве случаев, если у вас предполагается нагрузка, то после того, как на порт приходят данные, проверяется есть ли уже установленная сессия, и если нет, создается отдельный поток для нового юзера/подключения. А уже какое ядро - ОС сама разберется с многопоточностью.
Ответ написан
@Drno
можно. только количество портов как совмещается с ядрами то?
Ответ написан
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
Может. Нет никаких проблем :) Портов 65535 :)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы