Minimierung der Komplexität
-
Ich hab ein Problem, das sich relativ gut verallgemeinern läßt, wie folgt :
Gegeben seien N Threads die jeweils Ereignisse/Events erzeugen und empfangen können. Erzeugt nun Thread-X ein Events, muss dieses Event zu potentiell N-1 anderen Threads übertragen werden.
(über eine thread-sichere Verbindung z.b. Mutex-Locked queue)
Sinnvollerweise möchte ich keine Events an Threads übertragen, die dieses Event gar nicht brauchen.
Events sind beliebig kopierbar.Bisher gibt es eine Art Thread-Manager, an dem sich die Threads registrieren.
Gesucht wird nun ein Kommunikations-Konzept, das sehr performant arbeitet, mit relativ wenig Verwaltungsoverhead.
Bisher sehe ich zwei Möglichkeiten:
1. P2P-System:
Jeder Thread baut N-1 Verbindungen zu anderen Threads auf. Um Events zu filtern benötigt man aber dann N-1 Filter-Listen, die dann immer mit allen Threads syncronisiert werden sollen. (Im schlechtesten Fall wird das Event übertragen und beim Empfänger verworfen).
Also gibt es insgesamt N*(N-1) Verbindungen und N-1 Filter-Listen.
(großer Overhead?)2. Manager-System:
Es gibt eine zentrale Instanz, die sich nur um die Auslieferung zwischen den Events kümmert. Es gibt genau eine Filter-Liste und genau N-Verbindungen zum ThreadManager.Ich bevorzuge das zweite System, aber sehe dort Nachteile, wenn man viele Threads hat :
1. Event-Manager ist shared-Data von allen Threads, d.h. es wird sehr viel Zeit wegen den Mutexen/Locks drauf gehen.
2. Der Event-Manager bildet eine Art Performance-Flaschenhals, wenn beispielweise ein großes Event x-Mal kopiert werden muss.
3. Im Fall 2 sinkt auch die Reaktions-Zeit des Gesamt-Systems.Mich interessiert nur die Komplexitäts-Betrachtung dieses Problems.
Ich bin auch für andere Konzepte offen.Danke für kompetente Antworten