2016-05-06 7 views
3

Steherfaden Pool wurde verwendet, um die Anzahl von Threads in Java-Anwendung zu begrenzen, indem eine ganzzahlige Variable auf die Ausführenden Methode wie Passieren unterhalbWas ist die ideale Größe des Fixed Thread Pools?

Executors.newFixedThreadPool(10); 

Angenommen, wir eine beliebige Anwendung entwerfen und wir verwenden festen Thread-Pool dann, wie Können wir eine Entscheidung für eine ideale feste Thread-Pool-Größe treffen oder auf welcher Grundlage sollten wir die feste Thread-Pool-Größe entscheiden?

+0

verwandte SE Frage: http://stackoverflow.com/questions/8307423/java-executorservice-scaling/ –

Antwort

3

Zunächst einmal

1.) Sind Sie in Ihrer Anwendung FixedThreadPool für die gesamte Anwendung oder für bestimmte Aufgabe zu schaffen.

2.) Der Server, auf dem Ihre Anwendung bereitgestellt wird, unterstützt, wie viele CPUs pro CPU wie viele Threads.

3.) Es kann sein, dass Sie weniger Anzahl von Threads zuweisen, während der Server mehr hat oder mehr zuweisen kann und Ihre Tasks nicht so viele erfordern. Es ist mehr oder weniger wie eine Verschwendung von Ressourcen.

Thread-Pool-Größen sollten selten fest codiert sein; stattdessen sollten Poolgrößen durch einen Konfigurationsmechanismus bereitgestellt werden oder dynamisch berechnet werden, indem Runtime.availableProcessors konsultiert wird.

ein gutes detailliertes Verständnis ist verfügbar here

+0

Danke Ankur für Ihre schnelle Antwort. Der angegebene Link hat eine detaillierte Erklärung, die meine Frage beantwortet. – Jai

+1

Der Link ist eine raubkopierte (und nicht attributierte!) Kopie von Abschnitt 8.2 von _Java Concurrency in Practice_. –

0

Wenn Sie dort für eine Formel, die Methodik der Suche ist wenig - natürlich können Sie die Informationen bekommen können, wie viele Kerne werden unterstützt aber es ist wichtig, dass, wenn Sie sich erinnern Ihre Anwendung wird in einem Container bereitgestellt und Ihre Anwendung wird unter Verwendung von Frameworks und Bibliotheken erstellt. Möglicherweise verfügen Sie in Ihrem System bereits über mehrere erstellte Threadpools, die mehrere Dienste bereitstellen. Und obendrein die Art der Arbeit (CPU/IO-intensive würde auch eine wichtige Rolle spielen). Am besten wäre es also, mit einer Nummer zu beginnen und dann Ihre Bewerbung zu profilieren und diesen Sweet Spot zu bekommen. Eine gute Schätzung zu beginnen (wenn Sie sich der Umgebung Ihrer Anwendung nicht sicher sind) kann von here gemacht werden. Sie können leicht alle Threads in Ihrer Anwendung sehen, indem Sie sich mit Jconsole verbinden und eine Zusammenfassung kann in MBeans -> java.lang -> Threading -> Attribute gesehen werden.

Am Ende - die empirischen Beweise sind die besten in diesen Fällen.

Verwandte Themen