我正在寻找一种轻量级、快速且简单的方法来处理 Linux 计算机上某些程序之间的进程间通信。
目前,我正在考虑命名管道,因为它是由操作系统本身提供的。关于性能或可用性有什么注意事项吗?
共享内存会更好吗?
我认为我不需要一个超级复杂的框架。
请指出正确的方向,谢谢!
更新:
我想构建一个小程序(守护进程),告诉其他程序(它本身启动)暂停、报告其状态、停止等。
因此,应该通知其他程序有一个新命令正在等待它。管道并不理想,不是吗?
正如您所看到的,您可以用于进程间通信:
- 共享内存
- 命名管道
- TCP/UDP 套接字(最终是本地套接字)
共享内存具有性能优势,因为发送/接收消息时没有任何缓冲区。但您必须与另一个 IPC 同步数据交换。它可以是 IPC 信号量或...命名管道或套接字。
当性能不是主要目标时,我倾向于更喜欢套接字,因为它们的使用简单并且可以扩展到计算机间通信。
最好的方法是将您的通信抽象为一个类,当两个进程位于同一台计算机上时,该类可以使用共享内存,如果不是,则使用套接字。然后你必须在 UDP 和 TCP 之间进行选择;-)
对于同步/缓冲区交换,首选 TCP,因为它更可靠。
我不使用命名管道,因为我更喜欢套接字,以便可以使用计算机间通信,当然您可以找到很多便携式套接字库...
my2cents
EDIT:
对于同步来说,共享内存也许不是最好的工具。在您的情况下,可以通过共享一个小内存空间来使用它,并为每个等待命令的进程提供一个空间。您可以轮询任何传入命令或使用共享信号量。最快的方法是您的进程等待命名信号量并为其命令/参数读取共享内存空间。使用命名管道肯定更简单,但速度不是那么快。你肯定不需要那么快吧?不管怎样,在一个模拟你的交换协议的类中抽象它并尝试两种方法:-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)