Qual è un numero ragionevole di thread per un programma Java?

5

In Java (o probabilmente nella maggior parte degli altri linguaggi che si rivolgono alla JVM) qual è un numero ragionevole di thread da utilizzare? Presumibilmente, questo sarà espresso come rapporto al numero di core / processori disponibili, è corretto?

Almeno inizialmente, sembra che il numero di thread che i core potrebbero avere il doppio sia il doppio, ma 20+ volte il numero sembra irragionevole. È probabile che il rapporto sia influenzato dal tipo e / o dall'architettura del software? Esistono tipi di software e / o situazioni in cui un numero molto più elevato di thread ha davvero senso?

[E sì, lo so che è formulato come un numero di domande separate, ma penso che siano abbastanza strettamente correlate per una singola risposta per riguardarle tutte, dal momento che sono tutte davvero su quanti thread hanno senso sotto quali circostanze.]

    
posta 3Dave 23.02.2012 - 16:51
fonte

1 risposta

5

Molti commenti, ma nessuna risposta, ancora. Ecco una pugnalata veloce ...

Direi che dipende da cosa stanno facendo i tuoi thread. Puoi avere centinaia di thread, ma se la stragrande maggioranza li sta solo aspettando, non incorreranno in costi eccessivi. D'altra parte, se stai facendo calcoli, limiterei il numero di thread al numero di core. Non otterrai alcuna velocità di calcolo extra pura dalla programmazione di più. Inoltre, in questi casi, potresti considerare il parallelismo delle attività come un'alternativa.

Se il tuo codice è un mix di attesa ed elaborazione, la risposta è meno chiara. A parte le varie strategie che puoi adottare per velocizzare le cose, la tua migliore scommessa in questo caso è di fare il profiling per trovare un numero ottimale.

    
risposta data 28.02.2012 - 02:38
fonte

Leggi altre domande sui tag