Я разрабатываю дизайн программы, которая будет создавать несколько процессов с помощью exec
, а затем создавать соединение с ними с помощью сокетов, и у меня есть несколько альтернатив, но я не знаю, какой из них лучше.
Каждый дочерний процесс будет иметь около 3 служб, которые он хотел бы передать серверу.
ID
при запуске соединения /temp/service{1|2|3}.sock
./temp/{ID}/service{1|2|3}.sock
.Второй вариант кажется немного лучше, потому что мне не нужно сообщать серверу, кто я, когда начинается соединение, это подразумевается в имени сокета, и у каждой службы будет свой собственный сокет, но я не знаю, если это будет неэффективно создавать 3 сокета для каждого ребенка.
Я не понимаю, что вы имеете в виду, я использую Golang, и он использует другой метод
Интересный вопрос. Вот мои мысли по этому поводу:
(вокруг варианта 1)
Если через эти сокеты проходит большой трафик, то в какой-то момент они могут стать узким местом. Если это не так (малый трафик), то подойдет вариант 1.
(вокруг варианта 2)
Пусть N будет количеством дочерних процессов, созданных в заданный период времени. Если N * 3 > (общее количество файловых дескрипторов на вашем компьютере) для того же периода времени, то вариант 2 определенно не подходит.
Если вы также можете учитывать скорость повторного использования файловых дескрипторов, это сделает общую оценку более точной.
(Общий)
Я бы подумал об этих двух компромиссах и принял решение, основанное на этом. Без каких-либо цифр было бы трудно принять обоснованное решение.
Большое спасибо за ответ, он заставил меня задуматься, я подожду, чтобы принять ваш ответ, если кто-то еще решит ответить.
Создайте сокеты, прежде чем разветвлять дочерние элементы, используя
socketpair()
, так же, как вы использовали быpipe()
?