English 中文(简体)
在C++中进行进程间通信的最佳方式
原标题:
  • 时间:2008-12-16 18:22:53
  •  标签:

I have two processes one will query other for data.There will be huge amount of queries in a limited time (10000 per second) and data (>100 mb) will be transferred per second.Type of data will be an integral type(double,int) My question is in which way to connect this process?

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

And also i want to ask which library you suggest? by the way please do not suggest MPI. edit : under windows xp 32 bit

最佳回答

一个词:Boost.InterProcess。如果确实需要快速,共享内存是选择。你几乎没有开销,因为操作系统会在虚拟地址和物理地址之间进行常规映射,并且数据不需要进行复制。你只需要留意并发问题。

对于实际发送像shutdownquery这样的命令,我会使用消息队列。在我了解Boost之前,我之前使用本地主机网络编程做了这个,并使用手动共享内存分配。该死的,如果我需要重写应用程序,我会立即选择Boost。Boost.InterProcess使这更容易。查看它。

问题回答

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

我支持Marc的建议 - 除非您拥有可移植性问题或想要像在共享内存上映射标准容器类型这样的酷东西(在这种情况下,我肯定会使用boost),否则我不会使用boost。

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

If your data consists of multiple types and/or you need things like mutex, use Boost. Else use a shared section of memory using #pragma data_seg or a memory mapped file.

如果您使用共享内存,您必须决定是否旋转。我预计,如果您使用信号量进行同步并在共享内存中存储数据,则与使用消息队列相比(存在重大的明显退化),您不会获得太多性能上的好处,但如果您在原子变量上旋转以进行同步,则必须承受此类后果。





相关问题
热门标签