我开始使用D-Bus作为Linux / KDE中新项目的IPC机制。而且我发现文档根本没有真正解决并发问题。 D-Bus服务如何处理来自不同客户端的多个并发呼叫?什么是线程模型?服务是否可以假设它是单线程的,而D-Bus会自行排队请求?
答案 0 :(得分:5)
作为协议,D-Bus不解决线程问题。
D-Bus连接按顺序接收消息。在协议级别,对消息的回复是异步的:即发送者在发送更多消息之前不必等待回复。
虽然原则上D-Bus实现可以同时向服务实现发送消息,但我不知道有任何这样做。
通常,D-Bus实现(或“绑定”,如果您愿意)允许服务决定每个方法(甚至是每个方法调用)是同步还是异步响应传入方法调用。详细信息取决于您正在使用的特定实现。
如果您异步响应方法调用,那么您的服务实现负责确保在多个响应处于挂起状态时任何状态保持一致。如果你总是同步响应,那么你知道你一次只处理一个方法调用。