Java CachedThreadPool und FixedThreadPool

8

Ich habe einen Auslastungstest für meine Anwendung ausgeführt, um die maximale Anzahl von Threads zu ermitteln, die zur Unterstützung der geplanten Last benötigt werden.

Ich habe ExecutorService CachedThreadPool verwendet, damit Threads basierend auf der Auslastung dynamisch erstellt werden. Jetzt kenne ich den Wert der maximalen Thread-Anzahl mit getLargestPoolSize() .

Soll ich CachedThreadPool durch FixedThreadPool(maxValue) ersetzen, um das große (Integer.MAX_VALUE) Thread-Erstellungsverhalten von CachedThreadPool zu vermeiden?

Schlagen Sie Vor- und Nachteile von jedem von ihnen.

    
MIK 25.09.2015, 22:47
quelle

1 Antwort

4

Der wichtigste Unterschied zwischen einem Cache-Thread-Pool und einem festen Thread-Pool in Java ist, dass der Cache-Thread-Pool keine Obergrenze für die Anzahl der Threads hat, die er spawnen und verwenden wird. Welche davon bevorzugt wird, hängt davon ab, wie das Skalierungsverhalten aussehen soll.

Der Hauptvorteil des zwischengespeicherten Threadpools besteht darin, dass Threads sofort ausgeführt werden, auch wenn Sie eine unvorhergesehene große Anzahl von auszuführenden Tasks haben. Beispielsweise können sich Ihre geschäftlichen Anforderungen über Monate oder Jahre hinweg erhöhen, und Ihre Anwendung wird möglicherweise auf leistungsstärkere Computer verschoben. Durch die Verwendung eines zwischengespeicherten Threadpools können die erhöhten Anforderungen bedient werden, indem die erhöhte verfügbare Verarbeitungsleistung genutzt wird, ohne den Code ändern zu müssen . Dies kann von Vorteil sein, da sich die Benutzer möglicherweise nicht mehr gut genug an den Code erinnern, wenn das Programm monatelang oder jahrelang in Betrieb war, um das Thread-Limit als Parameter zu identifizieren, der zur Verbesserung der Leistung geändert werden kann.

Der Hauptvorteil des festen Threadpools besteht darin, dass die Anzahl der Threads strenger gesteuert wird. Dies verhindert, dass andere Teile der Softwareinstallation - entweder innerhalb der Anwendung oder in anderen Anwendungen - an der Verarbeitungsleistung leiden, sollte diese Anwendung in kurzer Zeit eine große Anzahl von Aufgaben erhalten. Darüber hinaus verringert sich das Risiko, dass das Threading-Limit des Betriebssystems überschritten wird, wodurch das Risiko von Softwareabstürzen reduziert wird, die entstehen können, wenn ein Prozess einen Thread generieren muss und nicht in der Lage ist.

    
Warren Dew 26.09.2015, 03:53
quelle