c++ - 进程间通信推荐

标签 c++ linux ipc

<分区>

我正在寻找一种轻量级、快速且简单的方法来处理 Linux 机器上某些程序之间的进程间通信。

目前,我正在考虑命名管道,因为它是由操作系统本身提供的。关于性能或可用性有什么注意事项吗?

共享内存会更好吗?

我不认为我需要一个 super 复杂的框架。

请指点我正确的方向,谢谢!


更新: 我想构建一个小程序(守护进程),告诉其他程序(它自己启动)暂停、报告它们的状态、停止等。

所以应该通知其他程序一个新的命令正在等待它。管道对此并不理想,对吗?

最佳答案

如您所见,您可以用于进程间通信:

  • 共享内存
  • 命名管道
  • TCP/UDP 套接字(最终是本地套接字)

共享内存具有性能优势,因为您在发送/接收消息时没有任何缓冲区。但是您必须将您的数据交换与另一台 IPC 同步。它可以是 IPC 信号量或...命名管道或套接字。

当性能不是主要目标时,我倾向于使用套接字,因为它们使用简单并且可以扩展到计算机间通信。

最好的方法是抽象您与一个类的通信,当两个进程在同一台计算机上时可以使用共享内存,如果不是,则使用套接字。然后你必须在 UDP 和 TCP 之间做出选择;-)

对于同步/缓冲区交换,首选 TCP,因为它更可靠。

我不使用命名管道,因为我更喜欢套接字,因为它可以使用计算机间通信,当然你可以找到很多可移植套接字库...

我的2美分

编辑:

对于同步,共享内存可能不是最好的工具。在您的情况下,可以通过共享一个小的内存空间来使用它,每个等待命令的进程都有一个空间。您可以轮询任何传入命令或使用共享信号量。最快的方法是您的进程等待命名信号量并为其命令/参数读取共享内存空间。使用命名管道肯定更简单,但没有那么快。你肯定不需要那么快?无论如何在模拟您的交换协议(protocol)的类中抽象并尝试两种方式:-)

关于c++ - 进程间通信推荐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1906166/

相关文章:

c++ - Eigen 的 MATLAB find()/Numpy 非零习语

c++ - 用纯C++解析简单的html

linux - 更改指定组的 chmod

linux - 已释放的内存未反射(reflect)在 DF 命令中

c - 消息接收程序只打印每隔一条消息

android - 如何在进程之间将文件描述符传递给 Ashmem

Linux 共享内存

c++ - < 变为 > 时,如何优雅地避免代码重复?

c - C语言中strtok的使用

适合在动态有序列表中查找第 n 个元素的 C++ STL 容器?