sockets - IPC速度及比较

标签 sockets ipc real-time shared-memory pipe

我正在尝试实现一个涉及跨不同模块的 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/

相关文章:

java - Selector.close() 是否关闭所有客户端套接字?

php - php中的udp套接字编程

c# - 从 Linux 服务器与 C# 桌面应用程序通信的选项?

python - 使用 Matplotlib 进行实时绘图。 X 轴被覆盖

java - 我们应该使用什么技术来实时处理terra字节数据?

java - 如何使用 2 个虚拟机在 java 中测试我的套接字程序?

c++ - 利用 poll() 函数(用户空间)的其他方法?

linux - 重新定义信号处理缺陷

c - 如何删除所有 IPC-Message 队列?

c - 如何让一个子进程等待它的兄弟?