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

最佳答案

作为一种协议(protocol),D-Bus 不解决线程问题。

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

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

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

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

关于linux - D-Bus线程模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1992777/

10-16 20:47