Hallo,
Das wesentliche Problem besteht darin, dass ein Prozess, der einen RPC empfängt,
Verstehe ich das richtig das der Prozess nicht extra eine (oder mehrere) Message-Sink/Queue explizit erstellt (um diese dann, eventuell aus mehreren Threads parallel, gezielt, eventuell blockierend, abzufragen) sondern eben so wie bei klassischen Signalen das es pro Prozess einen Signal-Handler gibt der für alles zuständig ist und einen beliebigen Thread im Prozess an beliebiger Stelle unterbricht?
Das würde ich persönlich als
schlimm empfinden.
Und wenn der RPC-Handler auf irgendeinen globalen Zustand zugreift, ...
dann wird es eklig. Ja das kann ich als
Nachteil sehr gut verstehen.
Wie macht ihr das dann mit RPC? Wie wird die Antwort der entsprechenden Anfrage zugeordnet und wieder zum richtigen Prozess zugestellt? Kommt die Antwort über den selben Weg, als
asynchrones Signal, zum Absender der Anfrage?
oder aber man könnte für jeden RPC einen neuen Thread erstellen, der einfach nur den Handler abarbeitet
Meinst Du damit dass das OS einfach einen neuen Thread für den betreffenden Prozess erstellt und dieser Thread als
main-Funktion den Message-Handler und die Message als dessen Parameter (und der Return-Wert die Antwort ist) bekommt? Das währe natürlich mal ne interessante Idee. Das löst das Problem das ein Prozess auf
mehrere unabhängige Message-Queues mit
einem SYSCALL warten muss oder gar für jede Message-Queue einen extra Thread erstellen muss anstatt alle Queues reihum aktiv abzufragen.
Natürlich muss dann beim erstellen der Message-Queue festgelegt werden wie viele Threads das OS maximal gleichzeitig erstellen darf und das OS muss alles was mehr kommt dann wirklich in die Queue legen und kann dafür die existierenden Threads dann, wenn diese ihre Antwort zurückgeben, gleich recyceln für die nächste Message in der Queue. Eine echt interessante Idee, muss ich mal ein paar Nächte drüber schlafen.
In der WIN32-API gibt es für das warten auf mehrere Events (das Event welches zuerst kommt weckt dann den wartenden Thread) extra Funktionen.
Grüße
Erik