2010-01-02 83 views
8

我開始使用D-Bus作爲Linux/KDE中新項目的IPC機制。我發現文檔並沒有真正解決併發問題。 D-Bus服務如何處理來自不同客戶端的多個併發呼叫?什麼是線程模型?服務可以假設它是單線程的,D-Bus會自行排隊請求嗎?D-Bus線程模型

回答

5

作爲一種協議,D-Bus並沒有解決線程問題。

D-Bus連接按順序接收消息。在協議級別,對消息的回覆是異步的:即發送者在發送更多消息之前不必等待回覆。

雖然原則上D-Bus實現可以同時向服務實現派發消息,但我不知道這是否有這樣做。

通常,D-Bus實現(或「綁定」,如果您願意的話)允許服務爲每個方法(甚至每個方法調用)決定是否同步或異步響應傳入的方法調用。這些細節取決於你正在使用的特定實現。

如果您異步響應方法調用,您的服務實現負責確保在多個響應處於待處理狀態時任何狀態保持一致。如果你總是同步響應,那麼你知道你一次只能處理一個方法調用。

+1

謝謝。這與我在使用Qt綁定的Kubuntu中看到的一致。如果我在遠程服務方法(插槽)中設置斷點,然後從兩個客戶端調用斷點,則第二個客戶端將被完全阻止,直到我的代碼處理完第一條消息。但我不確定我是否可以依靠這個。 – 2010-01-03 03:47:35