Framework: Usercode in eigenem Thread laufen lassen?
-
Hallo zusammen,
ich konzipiere grade ein Client-Server Framework, und es stellt sich mir ein kleines Designproblem beim der Implementierung des Servers.
Im Server habe ich folgende Komponenten:
- "Clientdispatcher": Ein vom Framework geliefertes Modul für die Konfiguration des Servers, die Verarbeitung der Client-Anfragen und das Senden von Events an die Clients.
- Eine vom Benutzer des Frameworks implementierte Logik-Komponente
- Zwei Komponenten, die Daten beinhalten, zum Einen Konfigurationsdaten, zum Anderen Daten, die für die Nutzung des Frameworks relevant sind und von der nutzerdefinierten Komponente verarbeitet werden.
- "Logic-Interface": Schnittstelle, über die die Logik-Implementierung auf die Daten zugreifen kann.Eine Darstellung davon hier:
http://www.derpumu.de/jpg/ServerArchitektur.jpgDie Logik-Komponente (weiß) greift auf die Konfigurationsdaten nur lesend zu (blauer Pfeil), auf die anderen Daten auch schreibend (schwarzer Pfeil). Für den Clientdispatcher gilt genau das Gegenteil, d.h. auf die Konfiguration wird auch schreibend zugegriffen, die anderen Daten nur gelesen.
Bei Änderungen an den sonstigen Daten durch die Logik-Komponente werden Events an betroffene Clients geschickt (roter Pfeil), ansonsten antwortet der Clientdispatcher direkt auf Client-Anfragen.Meine Frage ist jetzt, ob ich den Usercode in einem eigenen Thread laufen lassen sollte. Ein Grund dafür wäre, dass der Usercode möglicherweise rechenintensiv oder anderweitig imperformant sein könnte und die normalerweise schnell zu behandelnden Anfragen, die direkt vom Framework behandelt werden, dann parallel beantwortet werden sollten. Außerdem wäre es möglich, dass der Usercode selbst mehrere Threads startet und konkurrierend auf die Daten zugreift, so dass ich den Zugriff für solche Fälle sicherheitshalber so oder so synchronisieren müsste.
Ein Nachteil wäre, dass ich nicht nu den Zugriff auf die Daten synchronisieren müsste, sondern auch die Benachrichtigung der Clients konkurrierend laufen würde, da parallel die Antworten des Clientdispatchers und die Events aus den sonstigen Daten an die Clients verschickt würden.
Wozu würdet ihr mir raten?