43

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

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

我还想问你推荐哪个图书馆?顺便说一句,请不要建议 MPI。编辑:在 windows xp 32 位下

4

5 回答 5

44

一个词:Boost.InterProcess。如果它真的需要快速,共享内存就是要走的路。您的开销几乎为零,因为操作系统在虚拟地址和物理地址之间进行通常的映射,并且不需要复制数据。您只需要注意并发问题。

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

于 2008-12-16T18:26:31.857 回答
7

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

于 2008-12-16T18:56:38.007 回答
4

我会赞同 Marc 的建议——除非您有可移植性问题或想做一些很酷的事情,例如在共享内存上映射标准容器类型(在这种情况下,我肯定会使用 boost)。

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

于 2008-12-16T19:05:55.037 回答
4

如果您的数据包含多种类型和/或您需要诸如互斥锁之类的东西,请使用 Boost。否则,使用#pragma data_seg 或内存映射文件使用内存的共享部分。

于 2011-07-21T23:59:29.233 回答
3

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

于 2008-12-16T19:08:13.940 回答