2015-09-25 9 views
8

Ich habe Lasttest auf meiner Anwendung ausgeführt, um die maximale Anzahl von Threads zu finden, die benötigt werden, um die geplante Last zu unterstützen.Java CachedThreadPool vs FixedThreadPool

Ich habe ExecutorServiceCachedThreadPool verwendet, so dass Threads basierend auf Last dynamisch erstellt werden. Jetzt kenne ich den Wert der maximalen Thread-Anzahl unter Verwendung .

Soll ich ersetzen CachedThreadPool mit FixedThreadPool(maxValue), das großen (Integer.MAX_VALUE) Thread-Erzeugung Verhalten von CachedThreadPool zu vermeiden?

Vorschlagen Vor- und Nachteile von jedem von ihnen.

+0

Auf welches "* große Thread-Erstellungsverhalten *" beziehen Sie sich? Meinst du die Tatsache, dass ein Cache-Thread-Pool einen neuen Thread erstellen wird, wenn keine verfügbar sind? Wenn das so ist, ist die bessere Frage: "Würde es mich stören, wenn meine Threads blockiert werden, wenn ich zufällig eine andere Aufgabe einreiche, während alle Worker-Threads unabwendbar sind?" "Denken Sie daran, dass ein zwischengespeicherter Thread-Pool Threads nach einer gewissen Zeit zerstört . Obwohl Sie die maximale Anzahl wissen, zählt der Durchschnitt? Wenn die maximale Anzahl 10 ist, aber der Durchschnitt 4 ist, würde es nicht viel Sinn machen, 10 Threads am Leben zu erhalten. –

+0

großes Thread-Erstellungsverhalten - Wenn jemand zu viele Anfragen sendet, sollte cachedThreadPool keine Integer.MAX_VALUE-Threads erstellen – MIK

+0

Finden Sie weitere gute Antworten @ https://stackoverflow.com/questions/17957382/fixedthreadpool-vs-cachethreadpool-the-lesser- von zwei Übeln –

Antwort

4

Der wichtigste Unterschied zwischen einem zwischengespeicherten Thread-Pool und einem festen Thread-Pool in Java ist, dass der zwischengespeicherte 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 Thread-Pools 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 die Anwendung monatelang oder jahrelang in Betrieb war, um das Threadlimit 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, wenn diese Anwendung in kurzer Zeit eine große Anzahl von Aufgaben erhält. Darüber hinaus wird das Risiko verringert, dass das Threading-Limit des Betriebssystems überschritten wird, wodurch das Risiko von Softwareabstürzen verringert wird, die entstehen können, wenn ein Prozess einen Thread generieren muss und nicht in der Lage ist, dies zu tun.