один процесс с несколькими прослушивающими портами ПРОТИВ нескольких процессов, каждый из которых прослушивает на одном порту

#java #c

#java #c

Вопрос:

Я собираюсь реализовать программу на стороне сервера, и мне любопытно, имеют ли следующие две реализации одинаковый эффект:

  1. один серверный процесс прослушивает 10 портов с 1000 потоками
  2. 10 серверных процессов, каждый из которых имеет 100 потоков и прослушивает 1 порт

Спасибо

Ответ №1:

Вариант 1 будет использовать меньше памяти, особенно для варианта Java. Стабильность варианта 1 будет меньше, поскольку один процесс здесь является единственной точкой отказа — все, что вы делаете для аварийного завершения процесса, повлияет на весь сервер. Опция 1 позволяет использовать взаимодействие в памяти между различными соединениями (если вы не создаете кластер серверов). Перезапуск и управление службами для варианта 1 намного проще.

Комментарии:

1. Скажем, игнорируйте потоки, и есть 10 отправляющих клиентов. Будет ли прослушивание на 3 разных портах быстрее, чем при прослушивании только на 1 порту?

2. Порты не являются абстракцией сетевой карты, поэтому для физического уровня не имеет значения, сколько у вас портов. И в вашей программе чтение из портов — это просто чтение / копирование данных в память — пропускная способность данных, количество пакетов и время обработки для каждого пакета данных имеют гораздо большее значение, чем количество портов. Параллельное чтение 3 потоками может быть быстрее в правильной среде, но только для максимальной пропускной способности. Количество портов начинает давать негативные эффекты, когда вы имеете дело с несколькими сотнями из них.