2009-12-10 4 views
3

У меня есть Java-программа, которая взаимодействует с программой на C++, используя сокет на localhost. Могу ли я ожидать получить какую-либо производительность (либо латентность, пропускную способность, либо и то и другое), перейдя на использование родной операционной системы? В первую очередь меня интересует Windows, но любое понимание, связанное с Unix/Linux/OSX, также приветствуется.Производительность сокетов против труб

EDIT: Уточнение: обе программы работают на одном хосте, в настоящее время обмениваются данными через сокет, т. Е. Путем соединения TCP/IP с localhost :. Мой вопрос в том, каковы потенциальные преимущества в производительности перехода на использование (локальных) именованных каналов (Windows) или их эквивалент Unix (сокет домена AF_UNIX?).

+0

Если IPC действительно является узким местом, как насчет использования JNI и запуска его в том же процессе? Вызов функции, вероятно, быстрее, чем любой IPC. – Ken

+0

Существует несколько причин. Стабильность JVM, вероятно, самая важная. Внешний код должен иметь возможность загружать сторонние библиотеки DLL различного качества, и я не хочу, чтобы они могли удалить JVM при их сбое. Не нужно создавать и связываться с библиотеками JVM, также является большой победой. – JesperE

ответ

7

Ken is right. Именованные каналы, безусловно, быстрее в Windows. В UNIX & Linux вам нужен UDS или локальный канал. То же самое, другое имя.

Ничего другого, кроме сокетов, будет быстрее для местной связи. Это включает в себя файлы с отображением памяти, локальные каналы, общую память, COM и т. Д.

+0

Я уверен, что Unix Domain Socket отличается от именованного канала (который существует в Linux и, возможно, во всех современных UNIX). – Ken

+0

О, просто осознал, что вы могли бы означать, что это приемлемо, и только «локальная труба» является синонимом «named pipe». Я никогда не слышал об этом (эта страница теперь № 3 в google для «linux local pipe»!). – Ken

+0

Да, я был не очень ясен. Я избегал упоминания названного «сокета» Apple, но все же сумел запутать его. :) – pestilence669

0

Первый хит google оказался this, который синхронизировал NT4 и XP и нашел именованные каналы (это то, что вы имели в виду, правда?), Чтобы быть быстрее в Windows.

+1

Я смущен. Цифры на странице, похоже, указывают на то, что именованные каналы ** медленнее ** по сравнению с сокетом, но, возможно, я читаю числа неправильно. – JesperE

+0

@ JesperE еще раз проверьте спецификации машин, которые выполняли тесты сокетов, превосходят машины для испытания труб более чем на 10: 1, а на испытательных установках для трубопроводов максимальная пропускная способность максимизируется, поэтому учитывая это, трубы уверенно быстрее. (но это действительно плохой путь к тестированию imo) –

+0

Этот тест сконструирован по-настоящему странным образом: автор берет две пары компьютеров из разных поколений с различными сетевыми технологиями и тестирует каждую технологию на * одной паре машин * только , Затем он подтверждает, что должно было быть неравенство, если бы технологии имели одинаковые эксплуатационные характеристики. Он также, похоже, не обеспокоен тем фактом, что один из полученных результатов на два порядка выше теоретического предела для сетевых технологий. Я бы не сделал никаких выводов на этой странице. – EFraim

Смежные вопросы