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


Anmelden zum Antworten