为事件驱动的应用程序选择IPC解决方案

时间:2010-12-06 10:21:39

标签: c ipc epoll iocp kqueue

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

以下因素对我很重要:

  • 事件驱动,没有完全重新设计 - 如果IPC机制不适合epoll,那就是我失去了几个月的工作
  • 快 - 如果这个机制不比套接字快,那么实现它就不值得了
  • 在执行期间灵活且(可重新)配置 - 我相信这会排除MPI&人
  • 无需多线程。

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

有什么建议吗?

感谢。

3 个答案:

答案 0 :(得分:3)

Unix套接字。 命名管道。 FIFO中。

这些都提供相同的基本功能 - 相同的机器跨进程通信。这些实现提供了稍微不同的行为。

它们都使用文件描述符,所以你可以直接将它们插入到套接字的位置。

答案 1 :(得分:2)

实际上,正如skwllsp所提到的,AF_INET套接字针对本地主机上的数据传输进行了优化,速度和复杂性与fifos,pipe,unix套接字相当(几乎相同?)(如果使用了很多skbuff处理目的地是同一个主机)。我的2美分是使用套接字。这样,您不仅可以为IPC机制保留相同的接口,还可以成功地将代码重用于远程和本地方案。

答案 2 :(得分:0)

试用Unix SysV IPC。它支持: -

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

这可能对你有帮助。

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