在 Windows 上实现 IPC 的首选方法是什么?
我知道几个类似的:命名管道,共享内存,信号量? ,也许是COM(虽然我不知道如何)...
我想知道什么被认为是最强大、最快速、最不容易出错并且易于维护/理解的。
几年前,我们针对客户端/服务器情况研究了这个特定问题,其中客户端和服务器都在同一台计算机上运行。当时,即使客户端和服务器位于同一台机器上,我们也使用套接字(UDP)。对于我们来说,“最好的”结果是使用命名信号量来共享内存来同步它。当时,我主要研究管道与原始共享内存实现。我测试了具有重叠 I/O 和 I/O 完成端口的管道。
我测试了多种数据大小。在客户端和服务器来回回显 1 字节的低端,原始共享内存实现的速度最快,是原来的 3 倍。当我来回传递 10,000 字节时,管道实现和原始共享内存实现都是最快的。大约相同的速度。如果我没记错的话,我使用的是 4K 缓冲区和共享内存实现。
对于所有数据大小,共享内存测试的速度比使用套接字快 2 倍到 6 倍(与 TCP 相比)。
在管道实现之间,当传递少量数据时,重叠 I/O 版本比 I/O 完成端口版本快约 30%。同样,对于较大的数据块,差异很小。
管道实现的编码当然要简单得多。但是我们处理了相当多的来回传递的小数据块,因此使用命名信号量实现共享内存版本的额外复杂性是值得的。
当然,正如前面提到的,这是几年前的事,你不知道我是否正确实施了所有不同的测试。另请注意,这是针对单个客户的。我们的共享内存通信的最终实现确实可以很好地扩展数百个“客户端”的运行。但我不知道在这种规模上它是否比管道实现更好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)