2015-09-25 24 views
8

Ho eseguito il test di carico sulla mia applicazione per trovare il numero massimo di thread necessari per supportare il carico pianificato.Java CachedThreadPool vs FixedThreadPool

Ho utilizzato ExecutorServiceCachedThreadPool in modo che i thread vengano creati dinamicamente in base al carico. Ora conosco il valore del numero massimo di thread usando getLargestPoolSize().

Devo sostituire CachedThreadPool con FixedThreadPool(maxValue), per evitare la grande comportamento creazione (Integer.MAX_VALUE) filo di CachedThreadPool?

Proporre pro e contro di ciascuno di essi.

+0

A cosa "* comportamento di creazione di thread di grandi dimensioni *" si riferisce? Intendi il fatto che un pool di thread memorizzato nella cache creerà un nuovo thread se non ce ne sono disponibili? Se è così, la domanda migliore è "* Mi dispiacerebbe che i miei thread venissero bloccati se mi capitasse di inviare un'altra attività mentre tutti i thread di lavoro non sono disponibili? *" Ricorda che un pool di thread in cache distruggerà i thread dopo un certo periodo di tempo . Anche se conosci il conteggio massimo, qual è il conteggio medio? Se il conteggio massimo è 10, ma la media è 4, non avrebbe molto senso mantenere in vita 10 thread. –

+0

comportamento di creazione di thread di grandi dimensioni - Se qualcuno invia troppe richieste, cacheThreadPool non deve creare thread Integer.MAX_VALUE – MIK

+0

Trova alcune altre risposte valide @ https://stackoverflow.com/questions/17957382/fixedthreadpool-vs-cachedthreadpool-the-lesser- di-due-mali / –

risposta

4

La differenza più importante tra un pool di thread memorizzato nella cache e un pool di thread fisso in Java è che il pool di thread memorizzato nella cache non ha un limite superiore al numero di thread che verrà generato e utilizzato. Quale è il preferito dipende da come si desidera che il comportamento di ridimensionamento sia come.

Il vantaggio principale del pool di thread memorizzato nella cache è che i thread inizieranno immediatamente l'esecuzione anche se si dispone di un numero elevato di attività impreviste da eseguire. Ad esempio, le esigenze aziendali possono aumentare nel corso di mesi o anni e l'applicazione può essere spostata su macchine più potenti e l'utilizzo di un pool di thread memorizzato nella cache consentirà di soddisfare le esigenze aumentate utilizzando la maggiore potenza di elaborazione disponibile senza dover modificare il codice . Questo può essere un vantaggio poiché una volta che l'applicazione è stata in servizio per mesi o anni, le persone potrebbero non ricordare il codice abbastanza facilmente per identificare il limite del thread come parametro che può essere modificato per migliorare le prestazioni.

Il vantaggio principale del pool di thread fisso è che il numero di thread è più strettamente controllato. Ciò consente di evitare che altre parti dell'installazione del software, all'interno dell'applicazione o in altre applicazioni, siano affamate di potenza di elaborazione nel caso in cui questa applicazione riceva un numero elevato di attività in un breve periodo di tempo. Inoltre, il rischio di incorrere nel limite di thread del sistema operativo è ridotto, riducendo i rischi di arresto anomalo del software che possono verificarsi quando un processo deve generare un thread e non è in grado di farlo.