进程间通信建议[关闭]

2023-11-23

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

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

共享内存会更好吗?

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

请指出正确的方向,谢谢!


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

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


正如您所看到的,您可以用于进程间通信:

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

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

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

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

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

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

my2cents

EDIT:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进程间通信建议[关闭] 的相关文章

随机推荐