2016-05-10 12 views
2

Ich habe eine einfache Frage zur Verwendung des Fork-Join-Thread-Pools. Hier ist ein kurzes Beispiel dafür, was ich verwende:Konfigurieren des Fork-Join-Thread-Pools

executor = "fork-join-executor" 
    # Configuration for the fork join pool 
    fork-join-executor { 
    # Min number of threads to cap factor-based parallelism number to 
    parallelism-min = 24 
    # Parallelism (threads) ... ceil(available processors * factor) 
    parallelism-factor = 4.0 
    # Max number of threads to cap factor-based parallelism number to 
    parallelism-max = 48 
    } 

Was bin ich nicht sicher ist, dass, wie viele Threads in diesem Fall erstellt werden? Ich laufe auf einer 2-Kern-Maschine, also sind es 24 Threads pro Kern mit maximal 48 Threads?

Wenn der Parallelitätsfaktor auf 4,0 eingestellt ist, wird die Anzahl der Threads, die parallel ausgeführt werden können, 8 sein. Was ist also für die Einstellung der Min- und Max-Werte erforderlich? 24 und 48?

+0

In Ihrem Codebeispiel, ist das akka Konfiguration? – Mifeet

+0

Ja, das ist der Konfigurations-Stil von akka! – sparkr

Antwort

3

Beginnen wir mit der Erklärung, wie die Parallelität in ForkJoinPool funktioniert. Die Anzahl der Threads wird durch einen einzelnen (Konstruktor) Parameter parallelism (der standardmäßig die Anzahl der Kerne eingestellt ist) gesteuert. ForkJoinPool versucht, höchstens parallelismläuft Threads zu halten. Aber es kann entscheiden, mehr Threads zu spawnen, wenn einige von ihnen blockiert sind. Z.B. Wenn Sie zu viele verzweigte Tasks haben, die auf Join warten, wird Ihre Berechnung blockiert, sofern Sie keine neuen Threads hinzufügen. Die wartenden Threads sind aktiv aber nicht läuft (weil sie warten). Weitere Erklärung here.

Die Dispatcher-Konfiguration in Ihren Fragen steuert, welchen Wert der Parameter parallelism hat. Es ist auf verfügbare Prozessoren * parallelism-factor aber mindestens parallelism-min und höchstens parallelism-max festgelegt. Weitere Informationen finden Sie unter here und here.

Wie viele Threads werden in diesem Fall erstellt?

Die Parallelität sollte 2 cores * 4 -> 8 threads sein. Daher sollte die Anzahl der laufenden Threads 8 sein, aber die Anzahl der erstellten Threads insgesamt kann höher sein.

Was die Notwendigkeit zur Einstellung der minimalen und maximalen Werte, die mein Fall ist, 24 und 48

Ich denke, es ist nur, wenn Sie mit einer unterschiedlichen Anzahl von Kernen auf einer Maschine im Einsatz.