DBus 与其他进程间通信方式的区别

Posted

技术标签:

【中文标题】DBus 与其他进程间通信方式的区别【英文标题】:Difference between DBus and other Interprocess Communications method 【发布时间】:2016-02-26 12:07:09 【问题描述】:

当我学习Linux进程间通信时,我知道有一些方法:管道、消息队列、套接字、信号、共享内存、信号量,没有名为Dbus的方法。

但是今天,当我研究 Dbus 时,我读到:“D-Bus 是一种用于进程间通信 (IPC) 的系统”(参见那个链接:https://en.wikipedia.org/wiki/D-Bus)

所以我的问题是: DBus与其他IPC方式有什么不同?

【问题讨论】:

【参考方案1】:

没有技术上的差异,而是历史上的差异。

D-Bus 以前不是 Linux(即内核)IPC,而是附加的中间件 IPC。但是在systemd 的引入过程中,D-Bus 成为了几个 Linux 发行版的基本系统的一部分。

【讨论】:

谢谢。 “中间件 IPC”是指 D-Bus 的 IPC 级别高于 en.wikipedia.org/wiki/Inter-process_communication 吗?您能否也列举一些其他“中间件 IPC”方法? 这并不完全正确。虽然 systemd 确实广泛使用 D-Bus,但在编写 systemd 之前,D-Bus 本质上已经是大多数免费桌面发行版的必需组件。它们是独立的项目。 抱歉,我看不出你反对哪一部分。在 systemd 之前使用 D-Bus 的事实并不能使其成为(内核)IPC。这类似于 RPC。你会发现很多使用 RPC 的项目。然而,大多数 RPC 实现过去都依赖于套接字(这通常是内核 IPC)。【参考方案2】:

一对一的ipc方法有一大群合作的进程会导致网格密集。但在 Dbus 的情况下,每个进程都可以连接到提供授予访问权限的任意数量的进程。在一个共同的单一共享频道上,用户可以连接到他自己的会话或新会话,而不会干扰其他用户的会话。这大大提高了性能

参考链接

https://blogs.gnome.org/abustany/2010/05/20/ipc-performance-the-return-of-the-report/

这显示了 DBus 性能与自定义 IPC 系统的比较。您可以更好地了解 Dbus 的性能

【讨论】:

好吧,还有其他(经典)IPC 不是严格一对一的,例如共享内存。 为什么Dbus不被称为ipc方法? @Murali:但是为什么在许多文档中,所有的 IPC 方法都不包含 DBUS?示例:en.wikipedia.org/wiki/Inter-process_communication @Viet DBUS 利用 IPC 机制,但不自己实现 IPC。

以上是关于DBus 与其他进程间通信方式的区别的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 上的进程间通信

进程间的通信方式与区别

linux 进程间通信 dbus-glib实例详解四(下) C库 dbus-glib 使用(附代码)

面试官:说说进程间通信和线程间通信的几种方式及区别

linux 进程间通信 dbus-glib实例详解二(上) 消息和消息总线(附代码)

进程间通信和线程间通信的几种方式