Производительность IPC: Именованный канал по сравнению с Сокетом

Как делают я заставляю его отобразиться в моем документе слова:

Вставляют-> Поле-> Category:DocumentAutomation-> Поле Names:DocVariable->, Полевая Кнопка Кодов-> Тогда вводит имя переменной.

97
задан tshepang 30 June 2012 в 03:59
поделиться

4 ответа

Именованные каналы и сокеты функционально не эквивалентны; сокеты предоставляют больше возможностей (для начала они двунаправленные).

Мы не можем сказать вам, какой из них будет работать лучше, но я сильно подозреваю, что это не имеет значения.

Доменные сокеты Unix будут делать то же самое, что и сокеты tcp , но только на локальном компьютере и с (возможно, немного) меньшими накладными расходами.

Если сокет Unix недостаточно быстр и вы передаете большой объем данных, рассмотрите возможность использования общей памяти между вашим клиентом и сервером (который НАМНОГО сложнее в настройке).

Unix и NT имеют "именованные каналы", но они совершенно разные по набору функций.

6
ответ дан 24 November 2019 в 05:25
поделиться

Я бы посоветовал вам сначала пойти по легкому пути, тщательно изолировав механизм IPC, чтобы вы могли переходить от сокета к каналу, но я определенно сначала выберу сокет. Вы должны быть уверены, что производительность IPC является проблемой, прежде чем выполнять превентивную оптимизацию.

И если у вас возникнут проблемы из-за скорости IPC, я думаю, вам следует подумать о переключении на разделяемую память, а не на конвейер.

Если вы хотите это сделать. Чтобы протестировать скорость передачи, вам следует попробовать socat , очень универсальную программу, которая позволяет создавать практически любой тип туннеля.

57
ответ дан 24 November 2019 в 05:25
поделиться

Я соглашусь с shodanex, похоже, вы преждевременно пытаетесь оптимизировать что-то, что еще не является проблемным. Если вы не знаете, что сокеты будут узким местом, я бы просто использовал их.

Многие люди, которые используют именованные каналы, находят небольшую экономию (в зависимости от того, насколько хорошо все написано) , но в итоге получается код, который тратит больше времени на блокировку ответа IPC, чем на выполнение полезной работы. Конечно, в этом помогают неблокирующие схемы, но это может быть сложно. Потратив годы на перенос старого кода в современную эпоху, я могу сказать, что в большинстве случаев, которые я видел, ускорение почти равно нулю.

Если вы действительно думаете, что сокеты будут замедлять вас, тогда выходите из ворота, использующие разделяемую память, с особым вниманием к тому, как вы используете блокировки. Опять же, на самом деле, вы можете обнаружить небольшое ускорение, но обратите внимание, что вы тратите его часть на ожидание блокировок взаимного исключения. Я не собираюсь защищать поездку в ад фьютекса (ну, не совсем ад в 2015 году, в зависимости от вашего опыта).

Фунт за фунт, сокеты ( почти) всегда лучший способ использовать IPC пользовательского пространства под монолитным ядром .. и (обычно) самый простой в отладке и поддержке.

и (обычно) самый простой в отладке и обслуживании.

и (обычно) самый простой в отладке и обслуживании.

30
ответ дан 24 November 2019 в 05:25
поделиться

Если вам не нужна скорость, то сокеты - это самый простой способ!

Если вам нужна скорость, то самым быстрым решением будет общая Память, а не именованные каналы.

.
10
ответ дан 24 November 2019 в 05:25
поделиться
Другие вопросы по тегам:

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