【发布时间】:2010-04-26 13:48:01
【问题描述】:
我在使用 Windows 命名管道时遇到了性能低下的问题。随着网络延迟的增加,吞吐量迅速下降。每秒发送的消息与往返时间之间存在大致线性关系。似乎客户端必须在服务器发送下一条消息之前确认每条消息。这会导致性能非常差,我每秒只能通过 RTT 为 200 毫秒的链接发送 5 条(约 100 字节)消息。
管道是异步的,使用多个重叠的写入操作(以及客户端的多个重叠读取),但这并没有提高吞吐量。是否可以通过命名管道并行发送消息?管道是使用 PIPE_TYPE_MESSAGE 创建的,PIPE_READMODE_BYTE 会更好吗?有没有其他方法可以提高性能?
这是一个已部署的解决方案,所以我不能简单地用套接字连接替换管道(我读过不建议在 WAN 上使用 Windows 命名管道,我想知道这是否是原因)。对于此事,我将不胜感激。
【问题讨论】:
-
Overlapped I/O 只是意味着 WriteFile 立即将控制权返回给您的应用程序。它不会影响实际的 WAN 流量。
-
是的,我明白了,谢谢。但是,我惊讶地发现每个写入事件都需要来自客户端的确认,然后管道才会发送更多数据,我正在尝试解决这个问题。
标签: c++ windows performance network-programming