C ++中进程间通信的最佳方式

问题描述 投票:36回答:5

我有两个进程,一个将查询其他数据。在有限的时间内将有大量的查询(每秒10000次),每秒将传输数据(> 100 mb)。数据类型将是一个整数类型(双,int)我的问题是以哪种方式连接这个过程?

共享内存,消息队列,lpc(本地过程调用)或其他....

而且我想问你建议哪个图书馆?顺便提一下,请不要建议MPI。编辑:在windows xp 32位下

c++ memory boost ipc shared
5个回答
39
投票

一句话:Boost.InterProcess。如果真的需要快速,共享内存是可行的方法。由于操作系统在虚拟和物理地址之间进行通常的映射,因此几乎没有开销,因此数据不需要复制。您只需要了解并发问题。

对于实际发送关闭和查询等命令,我会使用消息队列。我之前使用localhost网络编程来做这件事,并且在我知道boost之前使用了手动共享内存分配。该死的如果我需要重写应用程序,我会立即选择提升。 Boost.InterProcess使您更容易。看看这个。


6
投票

我会使用共享内存来存储数据,并使用消息队列来发送查询。


4
投票

如果您的数据包含多种类型和/或您需要mutex等内容,请使用Boost。否则,使用#pragma data_seg或内存映射文件使用共享的内存部分。


3
投票

我将第二个Marc的建议 - 除非你有一个可移植性问题或者想在共享内存上做地图标准容器类型之类的很酷的东西(在这种情况下我肯定会使用boost),否则我不会费心去提升。

否则,消息队列和共享内存非常容易处理。


3
投票

如果您确实使用共享内存,则必须决定是否旋转。我希望如果你使用信号量进行同步并将数据存储在共享内存中,那么与使用消息队列相比,你不会获得太多的性能优势(显着降低清晰度),但是如果你使用原子变量进行同步,那么你不得不承受这种后果。

© www.soinside.com 2019 - 2024. All rights reserved.