套接字与管道的性能

问题描述 投票:5回答:3

我有一个Java程序,它使用localhost上的套接字与C ++程序通信。我是否可以通过迁移使用本机OS管道来获得任何性能(延迟,带宽或两者)?我目前主要对Windows感兴趣,但也欢迎任何与Unix / Linux / OSX相关的见解。

编辑:澄清:两个程序在同一主机上运行,​​当前通过套接字进行通信,即通过与localhost建立TCP / IP连接:我的问题是切换到使用(本地)命名管道(Windows)或它们的Unix等效(AF_UNIX域套接字?)的潜在性能优势是什么。

sockets pipe named-pipes
3个回答
7
投票

肯是对的。 Windows上的命名管道肯定更快。在UNIX和Linux上,您需要UDS或本地管道。同样的事情,不同的名字。

除了套接字之外的任何东西都会更快地进行本地通信。这包括内存映射文件,本地管道,共享内存,COM等。


0
投票

第一个google点击了this,它计时NT4和XP,发现命名管道(这就是你的意思,对吗?)在Windows上更快。


-1
投票

对于本地进程通信管道肯定是更快。这是谷歌的基准测试:https://sites.google.com/site/rikkus/sysv-ipc-vs-unix-pipes-vs-unix-sockets我认为尽管socket是灵活的但它也可能导致糟糕的代码设计。在使用管道时,它会强制您设计项目的整个结构,比如哪个进程应该是应该是子进程的父进程以及它们如何协作(这将确定如何建立管道)并分配要处理的功能。因此,它将以分层方式设计整个项目并易于维护。

© www.soinside.com 2019 - 2024. All rights reserved.