gpt4 book ai didi

c++ - IPC的实现方式

转载 作者:可可西里 更新时间:2023-11-01 09:42:42 25 4
gpt4 key购买 nike

在 Windows 上实现 IPC 的首选方法是什么?

我知道几个类似的:命名管道、共享内存、信号量? ,也许是 COM(虽然我不确定如何)...

我想知道什么是最健壮、最快速、最不容易出错且易于维护/理解的。

最佳答案

几年前,我们针对客户端/服务器情况研究了这个特定问题,客户端和服务器都在同一台机器上运行。当时,即使客户端和服务器位于同一台机器上,我们也使用套接字 (UDP)。对我们来说,“最好”原来是共享内存与命名信号量来同步它。当时,我主要研究管道与原始共享内存实现的对比。我测试了具有重叠 I/O 和 I/O 完成端口的管道。

我测试了多种数据大小。在客户端和服务器来回回显 1 个字节的低端,原始共享内存实现是最快的 3 倍。当我来回传递 10,000 个字节时,管道实现和原始共享内存实现都是速度差不多。如果我对共享内存的实现没记错的话,我使用的是 4K 缓冲区。

对于所有数据大小,共享内存测试比使用套接字快 2 到 6 倍(与 TCP 相比)。

在管道实现之间,当传递少量数据时,重叠 I/O 版本比 I/O 完成端口版本快大约 30%。同样,对于更大的数据 block ,差异很小。

管道实现的代码当然要简单得多。但是我们处理了相当多的来回传递的小数据 block ,因此值得额外的复杂性来实现具有命名信号量的共享内存版本。

当然,如前所述,这是几年前的事了,您不知道我是否正确实现了所有不同的测试。另请注意,这是针对单个客户端的。我们共享内存通信的最终实现确实可以很好地扩展数百个运行的“客户端”。但我不知道在那个规模上它是否比管道实现更好。

关于c++ - IPC的实现方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1911203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com