我正在寻找一种轻量级,快速简便的方法来处理Linux机器上某些程序之间的进程间通信.
目前,我在想Named Pipe,因为它是由操作系统本身提供的.是否有关于性能或可用性的警告?
共享内存会更好吗?
我认为我不需要一个超级复杂的框架.
请指出我正确的方向,谢谢!
更新:我想构建一个小程序(守护进程),告诉其他程序(它自己启动)暂停,报告状态,停止等.
因此,应通知其他程序新命令正在等待它.管道不是理想的,是吗?
如您所见,您可以用于进程间通信:
共享内存
命名管道
TCP/UDP套接字(最终是本地套接字)
共享内存具有性能优势,因为在发送/接收消息时没有任何缓冲区.但是你必须与另一个IPC同步你的数据交换.它可以是IPC信号量或...命名管道或套接字.
当性能不是主要目标时,我倾向于选择套接字,因为它们的使用很简单,可以扩展到计算机间的通信.
最好的方法是使用可以在两个进程位于同一台计算机上使用共享内存的类来抽象您的通信,如果不是,则使用套接字.然后你必须在UDP和TCP之间进行选择;-)
对于同步/缓冲交换,更喜欢TCP,因为它更可靠.
我不使用命名管道,因为我更喜欢套接字,可以使用计算机间通信,当然你可以找到很多便携式套接字库......
my2cents
编辑:
对于同步,共享内存可能不是最好的工具.在您的情况下,它可以通过共享一个小的内存空间来使用,每个进程都有一个等待命令的空间.您可以轮询任何incomming命令或使用共享信号量.最快的方法是等待命名信号量并为其命令/参数读取共享内存空间的进程.使用命名管道肯定更简单,但不是那么快.你肯定不需要这么快?无论如何抽象,在一个类,模拟您的交换协议,并尝试两种方式:-)
Boost有一个很好的InterProcess库,它是跨平台的,非常直观.
虽然我只玩弄它,所以可能有更好的选择.
但是,如果你真的不需要共享内存,我会坚持使用消息传递方法.你将避免死锁和竞争条件.管道原理真的很棒,它甚至允许懒惰的行为,这可能会根据手头的事情为您节省大量的处理!