Queue->MultiThreades->Queue



  • Hallo zusammen,

    für mein Problem gibt es bestimmt irgendwie eine einfache Lösung, aber ich komme nicht drauf bzw. weiß nicht, was diesbezüglich best practice wäre.
    Ich habe eine Queue, in welche permanent strings hineingepumpt werden. Mittendrin lauern dann jede Menge hungrige Threads, welche die Queue leeren und die strings verarbeiten. Anschließend pumpen diese Threads das Ergebnis in eine andere Queue. Der Input hat eine Reihenfolge. 123456.....usw. Eben diese Reihenfolge müsste auch wieder in die Output Queue geschrieben werden. Sprich 123456.... und nicht 163245....
    Wie macht man das am besten??



  • Schreib sie nicht einzeln in die Queue sondern als 6er Block und lass jeden Block von einem Thread verarbeiten.



  • Ganz so einfach ist es jetzt nicht:-D Das mit dem 1-6 war doch nur ein Beispiel für die Verdeutlichung der Reihenfolge:-D
    Da laufen Millionen von string rein. Es muss schon was anderes her;-)



  • du könntest eine gemeinsame variable an die threads übergeben und die threads so lange warten lassen, bis sie an der reihe sind.



  • @secondsun-gmx-de sagte in Queue->MultiThreades->Queue:

    Es muss schon was anderes her;-)

    Deine Beschreibung ist so schwammig, was erwartest Du da?



  • Also zum einen würde ich die "Worker-Threads" ( so nenne ich die "hungrigen" mal ), nicht die Daten aus einer Quell-Q abholen lassen, sondern jedem WorkerThread eine eigene Q verpassen, in die die Datenquelle Strings pushen kann. Zusätzlich zum String könnte eine laufende ID mitgeliefert werden. Je nach Größe oder Länge des Transportweges könnte man auch überlegen die Strings in einen shared_ptr zu transportieren zusammen mit der ID.

    Wenn jeder WorkerThread dann noch die Output-Q kennt, baust du an diese Outputqueue noch eine Synchronisierung ( einem Thread ), die die Daten wiederum in die richtige Reihenfolge bringt. Das müsste sich mit einem vector ganz gut machen lassen.

    Das Problem ist übrigens kein ungewöhnliches. Wenn man größere Datenmengen verarbeitet, die in einer bestimmten Reihenfolge ( Konsistenz der Daten ) bleiben müssen, treten solche Aufgabenstellungen auf 😉

    Noch detailierten kann man dir dann nur noch helfen, wenn das genau Problem bekannt ist. Ich vermute mal, die "Strings" sind Messages, die von einem Socket kommen.


Log in to reply