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

标签 c ipc epoll iocp kqueue

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

以下因素对我很重要:

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

我愿意为不同的平台使用不同的机制,只要它们都使用相同的范例。我也愿意根据需要深入了解 C/C++/Obj-C 以获取特定于平台的绑定(bind)。

有什么建议吗?

谢谢。

最佳答案

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

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

它们都使用文件描述符,因此您只需将它们插入您的套接字所在的位置即可。

关于为事件驱动应用程序选择 IPC 解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4365366/

相关文章:

如果我使用 C 代码,Android Studio 无法调试

linux - 释放共享内存段

c++ - 与信号量共享内存同步

c++ - C++ 中的可扩展服务器框架

c - Sendto:参数无效错误

凯撒密码不解密

C++ 引用复杂性让我很困惑

linux - libnl-3 包括损坏的?

c - 为什么 epoll_ctl 说我有一个坏的 fd?

linux - 多线程 epoll 服务器 : wake up N threads sleeping on the same epoll fd