Я перерабатываю часть инфраструктуры существующего приложения, которое отправляет пакеты данных UDP на адреса 1 ... N (часто многоадресной рассылки). В настоящее время существуют, скажем, объекты передатчика T, а в некоторых случаях все передатчики отправляются на тот же адрес.Эффективность отправки пакетов UDP по тому же адресу
Чтобы упростить и предоставить примерный пример, скажем, что есть 3 объекта передатчика, и все они должны быть отправлены на один конкретный адрес. Мой вопрос ... эффективнее ?:
Вариант 1) Поместите мьютекс вокруг одного разъема и включите все передатчики (T) в один и тот же разъем.
T----\
T----->Socket
T----/
Вариант 2) Используйте три отдельных разъема, все отправляются в одно и то же место.
T----->Socket 1
T----->Socket 2
T----->Socket 3
Я подозреваю, что со вторым вариантом, под капотом, ОСЫ или NIC помещает мьютекс вокруг окончательной передачи так в большой картине, Вариант 2, вероятно, не много отличается от варианта 1.
На следующей неделе я, вероятно, настрою эксперимент на своем компьютере разработки, но я не могу проверить все потенциальные конфигурации компьютеров, которые могут быть установлены пользователями. Я также понимаю, что существуют разные реализации - Windows vs Linux, разные производители наборов микросхем NIC и т. Д., Но мне интересно, может ли кто-нибудь иметь какой-то прошлый опыт или архитектурные знания, которые могли бы пролить свет на преимущество одного варианта над другим.
Спасибо!
UDP без установления соединения, и UDP-дейтаграммы являются автономными сетевыми пакетами. Нет никакой пользы для ручного сериализации доступа к одному сокету, сетевой стек действительно будет обрабатывать сериализацию для вас во время передачи. Я бы позволил каждому передатчику использовать свой собственный сокет и просто позволить им взорваться. –