Thread-Pool



  • Ich beschäftige mich zur Zeit mit der Parallelen Programmierung unter Verwendung von Threads. Ich habe wiederkehrende Probleme, also ein Petri-Netz das einen Kreis bildet. Daten einlesen, verarbeiten, ablegen - und das immer wieder. Hierbei kommt nun eine grundsätzliche Designfrage auf:

    Nun Lese ich immer wieder von einem "Thread-Pool". Dabei erstellt man anscheinend einen Anzahl von Threads und übergibt ihnen ganz dynamisch zur Laufzeit eine gerade anstehende Aufgabe zu ausführen.
    Das andere Modell, welches ich zur Zeit verfolge, ist die Erstellung von mehreren Modulen die jeweils eine separate Aufgabe übernehmen und jeweils in einem eigenen Thread laufen.

    Nun frage ich mich was ist besser/richtig? Sollte man sich dabei an der Hardware orientieren, also auf einem Doppelkernprozessor nur zwei Threads (als Pool) starten und ihnen dynamisch Aufgaben übergeben, weil man dann weniger Threadwechsel hat? Oder ist das dynamische Zuweisen von aufgaben an die Threads eigentlich implizit auch ein Threadwechsel mit noch mehr Aufwand?



  • Hallo

    Zum einen, bei einen Thread-Pool erstellst du nicht eine bestimmte Anzahl von Threads, sondern du bedienst dich aus einen Pool von offenen Threads. Die Anzahl der Threads händelt das Betriebssystem für dich und sagst immer nur gebe mir einen Thread, und führe dies damit aus.
    Bin mir grad nur nicht mehr sicher, ob der Pool Prozess-weit zählt, oder ob er nicht sogar noch höher angesiedelt ist.

    Und den Threadwechsel hast du ja sowieso mit anderen laufenden Programmen. Und nach Standard ist es auch nicht gewiss welcher Thread welchen Prozessor zugewiesen wird, dies kann ebenso wechseln. Aber dies könntest du über Befehle festlegen, aber nicht wenn du den Thread-Pool verwendest.

    MfG marco



  • Marc-O schrieb:

    Hallo

    Zum einen, bei einen Thread-Pool erstellst du nicht eine bestimmte Anzahl von Threads, sondern du bedienst dich aus einen Pool von offenen Threads. Die Anzahl der Threads händelt das Betriebssystem für dich und sagst immer nur gebe mir einen Thread, und führe dies damit aus.

    Bei welchem Betriebssystem soll das so sein?

    Marc-O schrieb:

    Bin mir grad nur nicht mehr sicher, ob der Pool Prozess-weit zählt, oder ob er nicht sogar noch höher angesiedelt ist.

    Zumindest in Windows und Unixen sind Threads Bestandteil des Prozesses, somit kann ein Threadpool nicht "höher" angesiedelt sein.



  • Marc-Os Aussagen waren für mich auch etwas verwirrend. Ich erstelle Threads doch immer in der Anwendung. Das heißt ich muss in der Anwendung einen Thread-Pool anlegen. Die Frage ist nur, was bringt mir ein Thread-Pool?



  • fabske schrieb:

    Die Frage ist nur, was bringt mir ein Thread-Pool?

    Der Performance-Overhead, der durch das Erstellen immer wieder neuer Threads entsteht, entfällt.



  • Guck Dir mal den Wikipedia-Artikel zum Thema an. Der erklärt des ganz gut.



  • fabske schrieb:

    Marc-Os Aussagen waren für mich auch etwas verwirrend. Ich erstelle Threads doch immer in der Anwendung. Das heißt ich muss in der Anwendung einen Thread-Pool anlegen. Die Frage ist nur, was bringt mir ein Thread-Pool?

    Du musst nicht zwangsweise einen Thread-Pool anlegen. Wenn du nicht gerade alle halbe Sekunde einige Threads startest und beendest, wird es ohne Threadpool nicht messbar langsamer sein.


Anmelden zum Antworten