在Windows上实现IPC的首选方法是什么?
我知道几个像:命名管道,共享内存,信号量?,也许是COM(虽然我不确定如何)......
我想知道什么是最强大,最快速,最不易出错且易于维护/理解的内容.
几年前,我们针对客户端/服务器情况研究了这个特定问题,其中客户端和服务器都在同一台机器上运行.当时,即使客户端和服务器在同一台机器上,我们也在使用套接字(UDP).对我们来说,"最好"被证明是与命名信号量共享内存以同步它.当时,我主要研究管道与原始共享内存实现.我测试了具有重叠I/O和I/O完成端口的管道.
我测试了各种各样的数据大小.在客户端和服务器来回回送1个字节的低端,原始共享内存实现速度最快为3倍.当我来回传递10,000个字节时,管道实现和原始共享内存实现都是大约相同的速度.如果我用共享内存实现正确回忆,我正在使用4K缓冲区.
对于所有数据大小,共享内存测试的速度比使用套接字快2到6倍(与TCP相比).
在管道实现之间,当传递少量数据时,重叠的I/O版本比I/O完成端口版本快30%.同样,对于更大的数据块,差异很小.
对于代码来说,管道实现肯定不那么复杂.但是我们处理了相当多的小块数据来回传递,因此使用命名信号量实现共享内存版本是值得的.
当然,这是几年前提到的,你不知道我是否正确实施了所有不同的测试.另请注意,这是针对单个客户端的.我们的共享内存通信的最终实现确实可以很好地扩展到运行的数百个"客户端".但我不知道它是否比管道实施更好.