Linux IPC 选择?

Posted

技术标签:

【中文标题】Linux IPC 选择?【英文标题】:Linux IPC selection? 【发布时间】:2013-02-05 19:36:43 【问题描述】:

我有两个进程 A 和 B。A 和 B 有时需要通信(双向)以传递信号、消息等。 我已经对 Linux 中可用的 IPC 进行了一些基础研究,例如信号量、消息队列、dbus 等。 现在我在决定使用哪个 IPC 时感到困惑,谁能告诉我哪个 IPC 更适合我的应用程序?

提前致谢

已编辑:详细说明应用程序。 (它是一个嵌入式应用程序) 进程 A 将监控温度、速度计算等。进程 B 将驱动电机、读取传感器值(数字)等。有时我需要向进程 B 发送信号,告知达到最高温度,因此停止驱动电机。有时需要将从进程 A 中的传感器读取的数据发送到进程 B。像这样,数字数据需要跨进程传递。我在 ARM 架构中这样做。

【问题讨论】:

这取决于您的应用程序... 也许您应该详细说明您的处理器将来回传递的数据类型,以及您正在使用的处理器类型(ARM?、x86?、MIPS?)。跨度> @n.m.和 LastCoder 我已经编辑了问题并添加了应用程序的详细信息。 您可以在 dbus 和手工制作的 socket ipc 之间进行选择。所以问题是:为什么要重新发明***而不使用 dbus? 我从 dbus 开始,但有点困惑 dbus 是否适合我的应用程序。 【参考方案1】:

IPC 技术的选择取决于您尝试实现的应用程序。下面是一个很好的性能比较:

IPC name      Latency     Throughput   Description
-----------------------------------------------------------------------------------------
Signal        Low          n/a         Can be used only for notification, traditionally-
                                       to push process to change its state

Socket        Moderate     Moderate    Only one mechanism which works for remote nodes,
                                       not very fast but universal

D-Bus         High         High        A high-level protocol that increases latency and
                                       reduces throughput compared to when using base
                                       sockets, gains in increased ease of use

Shared        n/a          High        Data saved in-between process runs(due to swapping
memory                                 access time) can have non-constant access latency

Mapped files  n/a          High        Data can be saved in-between device boots

Message      Low           Moderate    Data saved in-between process runs. The message
queue                                  size is limited but there is less overhead
                                       to handle messages

这里有一个更好的比较

Comparing Unix/Linux IPC

【讨论】:

感谢您的比较,计划在我的应用程序中使用 D-Bus,因为它的高延迟我很担心。我的是实时应用程序。 D-bus的吞吐量部分说“高”,根据提供的描述,这应该是低的。 此表对 D-Bus 没有意义。它说“与使用基本套接字时相比降低了吞吐量”。套接字被列为“中等”吞吐量,因此 D-Bus 必须为“中等”或更少。根据描述,它不能是“高”。

以上是关于Linux IPC 选择?的主要内容,如果未能解决你的问题,请参考以下文章

IPC方法的选择

sql只选择重复的行

1,啥是IPC

IPC 还是命令行?

linux里的ipc是啥意思

Linux IPC基础