c++ - WAN 上 Windows 命名管道的低吞吐量

标签 c++ windows performance network-programming

我在使用 Windows 命名管道时遇到性能低下的问题。随着网络延迟的增加,吞吐量迅速下降。每秒发送的消息与往返时间之间大致呈线性关系。似乎客户端必须在服务器发送下一条消息之前确认每条消息。这会导致性能非常差,我每秒只能通过 RTT 为 200 毫秒的链接发送 5 条(~100 字节)消息。

管道是异步的,使用多个重叠的写入操作(以及客户端的多个重叠读取),但这并没有提高吞吐量。是否可以通过命名管道并行发送消息?管道是使用 PIPE_TYPE_MESSAGE 创建的,PIPE_READMODE_BYTE 会更好吗?有没有其他方法可以提高性能?

这是一个已部署的解决方案,所以我不能简单地用套接字连接替换管道(我读过不建议在 WAN 上使用 Windows 命名管道,我想知道这是否是原因).如果您能就此事提供任何帮助,我将不胜感激。

最佳答案

我们发现命名管道有 poor performance from Windows XP向前。

我没有适合你的解决方案。但我同意命名管道从 XP 开始就无用的概念。我们因此彻底改变了我们的软件(在 IPC 方面)。

您的通信是否分解为单独的 DLL?也许您可以用一个看起来相同但行为不同的接口(interface)替换 DLL?

关于c++ - WAN 上 Windows 命名管道的低吞吐量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2713931/

相关文章:

c++ - 如何在 C++ 中创建一个大小为 1 位的元素数组

c++ - 使用 C 样式字符串文字与构造未命名的 std::string 对象的默认建议?

windows - 通过命令行比较文件夹

c++ - 如何用fstream打开软盘

c++ - NodeJS : Native c++ module with multi-threading (openmp)

Python - 我的代码高效吗?或者人们会从杀死我的服务器中获得乐趣......?

JavaScript - 对象创建与更新

python - 查找两个 pandas 数据帧之间部分字符串匹配的最快方法

c++ - GCC 4.8 中 C++11 thread_local 变量的性能损失是多少?

c++ - 如何优化 std::map insert() 函数?