4

我目前正在研究一个相当大的单线程、基于事件的应用程序,该应用程序围绕 Linux 下的 epoll 和其他平台下的类似技术设计。目前,每当我们希望两个实例进行通信时,它们通常通过套接字进行,无论它们是否在同一台机器上运行。出于性能原因,我设想使用某种形式的 IPC 来加速同一台机器的通信。现在,我需要决定使用哪种 IPC 机制。

以下因素对我很重要:

  • 事件驱动,没有完全重新设计——如果 IPC 机制不能很好地适应 epoll,那几个月的工作对我来说就白费了
  • 快——如果这个机制不比套接字快,那么不值得花时间去实现它
  • 在执行过程中灵活且(重新)可配置——我相信这排除了 MPI & al
  • 不需要多线程。

我愿意为不同的平台使用不同的机制,只要它们都使用相同的范例。我也愿意尽可能深入地了解 C/C++/Obj-C 以实现特定于平台的绑定。

有什么建议吗?

谢谢。

4

3 回答 3

3

Unix 套接字。命名管道。先进先出。

这些都提供相同的基本功能——相同的机器跨进程通信。不过,这些实现提供的行为略有不同。

它们都使用文件描述符,因此您可以直接将它们插入您的套接字曾经所在的位置。

于 2010-12-06T10:52:01.183 回答
2

实际上,正如 skwllsp 所提到的,AF_INET 套接字针对本地主机上的数据传输进行了优化,并且速度和复杂性与 fifos、管道、unix 套接字相当(几乎相同?)(如果目标是同一主机)。我的 2 美分是使用插座。这样,您不仅可以为 IPC 机制保留相同的接口,而且可以成功地在远程和本地场景中重用您的代码。

于 2010-12-06T13:05:59.663 回答
0

试用 Unix SysV IPC。它支持:-

  • 消息队列
  • 信号
  • 共享内存

这可能会帮助你。

此链接可能有更多帮助: http: //www.ibm.com/developerworks/aix/library/au-ipc/index.html

于 2010-12-09T08:54:11.840 回答