我正在尝试实现一个实时应用程序,它涉及到不同模块的IPC。这些模块正在进行一些数据密集型处理。我在原型中使用消息队列作为IPC的主干(Activemq),这很容易(考虑到我完全是IPC新手),但是非常慢。
以下是我的情况:
我一直在研究不同的IPC方法:套接字、管道、共享内存。然而,我没有在IPC方面的经验,而且我绝对不可能在3周内失败这个演示。从一开始,哪一种IPC是安全的?
谢谢。莉莉
发布于 2010-06-01 01:04:21
我自己也面临过类似的问题。
我发现下面的页面很有用-- IPC性能:命名管道与插座 (特别是)和Windows上本地IPC的套接字与命名管道?。
如果您是真正关心性能的,那么共享内存就是解决问题的方法,但是如果您拥有的当前系统是一个消息队列,那么它可能是一个相当.不同的结构。套接字和/或命名管道可能更容易实现,如果两者都符合您的规范,那么您就完成了。
发布于 2019-01-09 23:18:22
使用共享内存解决方案可以获得最好的结果。
最近我遇到了同样的IPC基准。我认为我的结果对于所有想要比较IPC性能的人都是有用的。
管道基准:
Message size: 128
Message count: 1000000
Total duration: 27367.454 ms
Average duration: 27.319 us
Minimum duration: 5.888 us
Maximum duration: 15763.712 us
Standard deviation: 26.664 us
Message rate: 36539 msg/sFIFO(命名管道)基准测试:
Message size: 128
Message count: 1000000
Total duration: 38100.093 ms
Average duration: 38.025 us
Minimum duration: 6.656 us
Maximum duration: 27415.040 us
Standard deviation: 91.614 us
Message rate: 26246 msg/s消息队列基准测试:
Message size: 128
Message count: 1000000
Total duration: 14723.159 ms
Average duration: 14.675 us
Minimum duration: 3.840 us
Maximum duration: 17437.184 us
Standard deviation: 53.615 us
Message rate: 67920 msg/s共享内存基准:
Message size: 128
Message count: 1000000
Total duration: 261.650 ms
Average duration: 0.238 us
Minimum duration: 0.000 us
Maximum duration: 10092.032 us
Standard deviation: 22.095 us
Message rate: 3821893 msg/sTCP套接字基准测试:
Message size: 128
Message count: 1000000
Total duration: 44477.257 ms
Average duration: 44.391 us
Minimum duration: 11.520 us
Maximum duration: 15863.296 us
Standard deviation: 44.905 us
Message rate: 22483 msg/sUnix域套接字基准测试:
Message size: 128
Message count: 1000000
Total duration: 24579.846 ms
Average duration: 24.531 us
Minimum duration: 2.560 us
Maximum duration: 15932.928 us
Standard deviation: 37.854 us
Message rate: 40683 msg/sZeroMQ基准:
Message size: 128
Message count: 1000000
Total duration: 64872.327 ms
Average duration: 64.808 us
Minimum duration: 23.552 us
Maximum duration: 16443.392 us
Standard deviation: 133.483 us
Message rate: 15414 msg/s发布于 2011-10-12 16:05:25
在Windows上,您可以使用WM_COPYDATA,一种特殊的基于共享内存的IPC。这是一种古老但很简单的技术:"Process A“发送一条消息,其中包含指向其内存中某些数据的指针,并等待"Process”处理(对不起)消息,例如创建数据的本地副本。此方法非常快速,并在Windows8DeveloperPreview上工作(请参阅我的基准测试)。任何类型的数据都可以以这种方式传输,方法是在发送方序列化数据,在接收方反序列化数据。实现发送方和接收方消息队列,使通信异步也很简单。
https://stackoverflow.com/questions/2854004
复制相似问题