<分区>
我正在寻找一种轻量级、快速且简单的方法来处理 Linux 机器上某些程序之间的进程间通信。
目前,我正在考虑命名管道,因为它是由操作系统本身提供的。关于性能或可用性有什么注意事项吗?
共享内存会更好吗?
我不认为我需要一个 super 复杂的框架。
请指点我正确的方向,谢谢!
更新: 我想构建一个小程序(守护进程),告诉其他程序(它自己启动)暂停、报告它们的状态、停止等。
所以应该通知其他程序一个新的命令正在等待它。管道对此并不理想,对吗?
<分区>
我正在寻找一种轻量级、快速且简单的方法来处理 Linux 机器上某些程序之间的进程间通信。
目前,我正在考虑命名管道,因为它是由操作系统本身提供的。关于性能或可用性有什么注意事项吗?
共享内存会更好吗?
我不认为我需要一个 super 复杂的框架。
请指点我正确的方向,谢谢!
更新: 我想构建一个小程序(守护进程),告诉其他程序(它自己启动)暂停、报告它们的状态、停止等。
所以应该通知其他程序一个新的命令正在等待它。管道对此并不理想,对吗?
最佳答案
如您所见,您可以用于进程间通信:
共享内存具有性能优势,因为您在发送/接收消息时没有任何缓冲区。但是您必须将您的数据交换与另一台 IPC 同步。它可以是 IPC 信号量或...命名管道或套接字。
当性能不是主要目标时,我倾向于使用套接字,因为它们使用简单并且可以扩展到计算机间通信。
最好的方法是抽象您与一个类的通信,当两个进程在同一台计算机上时可以使用共享内存,如果不是,则使用套接字。然后你必须在 UDP 和 TCP 之间做出选择;-)
对于同步/缓冲区交换,首选 TCP,因为它更可靠。
我不使用命名管道,因为我更喜欢套接字,因为它可以使用计算机间通信,当然你可以找到很多可移植套接字库...
我的2美分
编辑:
对于同步,共享内存可能不是最好的工具。在您的情况下,可以通过共享一个小的内存空间来使用它,每个等待命令的进程都有一个空间。您可以轮询任何传入命令或使用共享信号量。最快的方法是您的进程等待命名信号量并为其命令/参数读取共享内存空间。使用命名管道肯定更简单,但没有那么快。你肯定不需要那么快?无论如何在模拟您的交换协议(protocol)的类中抽象并尝试两种方式:-)
关于c++ - 进程间通信推荐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1906166/