【问题标题】:D-Bus threading modelD-Bus 线程模型
【发布时间】:2010-12-31 20:32:51
【问题描述】:

我开始使用D-Bus 作为Linux/KDE 中新项目的IPC 机制。而且我发现文档根本没有真正解决并发问题。 D-Bus 服务如何处理来自不同客户端的多个并发调用?什么是线程模型?服务是否可以假设它是单线程的,并且 D-Bus 会自行排队请求?

【问题讨论】:

    标签: linux multithreading dbus


    【解决方案1】:

    作为一种协议,D-Bus 不涉及线程。

    D-Bus 连接串行接收消息。在协议级别,对消息的回复是异步的:即发送者在发送更多消息之前不必等待回复。

    虽然原则上 D-Bus 实现可以同时向服务实现发送消息,但我不知道有任何这样做的。

    通常,D-Bus 实现(或“绑定”,如果你愿意的话)允许服务为每个方法(甚至每个方法调用)决定是同步还是异步响应传入的方法调用。具体细节取决于您使用的特定实现。

    如果您以异步方式响应方法调用,则您的服务实现负责确保在多个响应处于待处理状态时任何状态都保持一致。如果您总是同步响应,那么您知道您一次只处理一个方法调用。

    【讨论】:

    • 谢谢。这与我在 Kubuntu 中使用 Qt 绑定看到的一致。如果我在远程服务方法(槽)中设置断点,然后从两个客户端调用它,则第二个客户端将完全阻塞,直到我的代码完成处理第一条消息。但我不确定我是否可以依靠这个。
    猜你喜欢
    • 2011-10-29
    • 2015-08-17
    • 2010-12-01
    • 2011-12-08
    • 1970-01-01
    • 2019-04-26
    • 2012-09-04
    • 2013-02-20
    • 1970-01-01
    相关资源
    最近更新 更多