D-Bus-Threading-Modell

8

Ich fange an, D-Bus als IPC-Mechanismus für ein neues Projekt in Linux / KDE zu verwenden. Und ich habe entdeckt, dass die Dokumentation überhaupt nicht auf Nebenläufigkeit eingeht. Wie sollen D-Bus-Dienste mit mehreren gleichzeitigen Anrufen von verschiedenen Clients umgehen? Was ist das Threading-Modell? Kann ein Dienst davon ausgehen, dass es Single-Threaded ist und D-Bus Anfragen selbst in die Warteschlange stellt?

    
Rob H 02.01.2010, 20:43
quelle

1 Antwort

5

Als Protokoll adressiert D-Bus kein Threading.

D-Bus-Verbindungen empfangen Nachrichten seriell. Auf der Protokollebene sind Antworten auf Nachrichten asynchron: d. H. Der Absender muss nicht auf Antworten warten, bevor er weitere Nachrichten sendet.

Während eine D-Bus-Implementierung im Prinzip Nachrichten gleichzeitig an Service-Implementierungen senden könnte, weiß ich von keinem, der das tut.

Normalerweise ermöglicht eine D-Bus-Implementierung (oder "binding", wenn Sie so wollen) dem Dienst, für jede Methode (oder sogar für jeden Methodenaufruf) zu entscheiden, ob er auf eingehende Methodenaufrufe synchron oder asynchron reagiert. Die Details dazu hängen von der jeweiligen Implementierung ab, die Sie verwenden.

Wenn Sie auf Methodenaufrufe asynchron reagieren, ist Ihre Service-Implementierung dafür verantwortlich, sicherzustellen, dass jeder Status konsistent bleibt, während mehrere Antworten ausstehen. Wenn Sie immer synchron antworten, wissen Sie, dass Sie immer nur mit einem Methodenaufruf zu tun haben.

    
daf 03.01.2010, 02:38
quelle

Tags und Links