首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IPC速度与比较

IPC速度与比较
EN

Stack Overflow用户
提问于 2010-05-18 01:09:44
回答 4查看 17.8K关注 0票数 18

我正在尝试实现一个实时应用程序,它涉及到不同模块的IPC。这些模块正在进行一些数据密集型处理。我在原型中使用消息队列作为IPC的主干(Activemq),这很容易(考虑到我完全是IPC新手),但是非常慢。

以下是我的情况:

  • 我已经隔离了IPC部分,以便将来可以以其他方式更改它。
  • 我有3周的时间来实现另一个更快的版本。;-(
  • IPC应该是快速的,但也比较容易捡起。

我一直在研究不同的IPC方法:套接字、管道、共享内存。然而,我没有在IPC方面的经验,而且我绝对不可能在3周内失败这个演示。从一开始,哪一种IPC是安全的?

谢谢。莉莉

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-01 01:04:21

我自己也面临过类似的问题。

我发现下面的页面很有用-- IPC性能:命名管道与插座 (特别是)和Windows上本地IPC的套接字与命名管道?

如果您是真正关心性能的,那么共享内存就是解决问题的方法,但是如果您拥有的当前系统是一个消息队列,那么它可能是一个相当.不同的结构。套接字和/或命名管道可能更容易实现,如果两者都符合您的规范,那么您就完成了。

票数 7
EN

Stack Overflow用户

发布于 2019-01-09 23:18:22

使用共享内存解决方案可以获得最好的结果。

最近我遇到了同样的IPC基准。我认为我的结果对于所有想要比较IPC性能的人都是有用的。

管道基准:

代码语言:javascript
复制
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(命名管道)基准测试:

代码语言:javascript
复制
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

消息队列基准测试:

代码语言:javascript
复制
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

共享内存基准:

代码语言:javascript
复制
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套接字基准测试:

代码语言:javascript
复制
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域套接字基准测试:

代码语言:javascript
复制
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基准:

代码语言:javascript
复制
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
票数 27
EN

Stack Overflow用户

发布于 2011-10-12 16:05:25

在Windows上,您可以使用WM_COPYDATA,一种特殊的基于共享内存的IPC。这是一种古老但很简单的技术:"Process A“发送一条消息,其中包含指向其内存中某些数据的指针,并等待"Process”处理(对不起)消息,例如创建数据的本地副本。此方法非常快速,并在Windows8DeveloperPreview上工作(请参阅我的基准测试)。任何类型的数据都可以以这种方式传输,方法是在发送方序列化数据,在接收方反序列化数据。实现发送方和接收方消息队列,使通信异步也很简单。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2854004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档