我正在尝试实现一个涉及跨不同模块的 IPC 的实时应用程序。这些模块正在进行一些数据密集型处理。我在原型(prototype)中使用消息队列作为 IPC 的 Backbone (Activemq),这很容易(考虑到我完全是 IPC 新手),但它非常非常慢。
这是我的情况:
- 我已经隔离了 IPC 部分,以便将来可以通过其他方式更改它。
- 我有 3 周的时间来实现另一个更快的版本。 ;-(
- IPC 应该很快,但也相对容易上手
我一直在研究不同的 IPC 方法:套接字、管道、共享内存。然而,我没有 IPC 经验,而且我绝对不可能在 3 周内让这个演示失败......哪种 IPC 是最安全的开始方式?
谢谢。 百合
最佳答案
使用共享内存解决方案可以获得最佳结果。
最近我遇到了同样的IPC benchmarking 。我认为我的结果对于所有想要比较 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/s
FIFO(命名管道)基准:
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/s
TCP 套接字基准测试:
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/s
Unix 域套接字基准测试:
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/s
ZeroMQ 基准测试:
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
关于sockets - IPC速度及比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2854004/