我有两个进程,一个将查询另一个数据。在有限的时间内(每秒 10000 次)将有大量查询,每秒将传输数据(>100 mb)。数据类型将是整数类型(双,int) 我的问题是用哪种方式连接这个过程?
共享内存、消息队列、lpc(本地过程调用)或其他......
我还想问你推荐哪个图书馆?顺便说一句,请不要建议 MPI。编辑:在 windows xp 32 位下
一个词:Boost.InterProcess。如果它真的需要快速,共享内存就是要走的路。您的开销几乎为零,因为操作系统在虚拟地址和物理地址之间进行通常的映射,并且不需要复制数据。您只需要注意并发问题。
对于实际发送关闭和查询等命令,我会使用消息队列。在我知道 boost 之前,我以前使用 localhost 网络编程来做到这一点,并使用手动共享内存分配。该死的,如果我需要重写应用程序,我会立即选择 boost。Boost.InterProcess 使您更容易做到这一点。看看这个。
我会使用共享内存来存储数据,并使用消息队列来发送查询。
我会赞同 Marc 的建议——除非您有可移植性问题或想做一些很酷的事情,例如在共享内存上映射标准容器类型(在这种情况下,我肯定会使用 boost)。
否则,消息队列和共享内存很容易处理。
如果您的数据包含多种类型和/或您需要诸如互斥锁之类的东西,请使用 Boost。否则,使用#pragma data_seg 或内存映射文件使用内存的共享部分。
如果您确实使用共享内存,您将不得不决定是否旋转。我希望,如果您使用信号量进行同步并将数据存储在共享内存中,与使用消息队列(清晰度明显下降)相比,您不会获得太多性能优势,但是如果您使用原子变量进行同步,那么您不得不承受这样的后果。