2017-09-09 42 views
0

我有一個應用程序可能會同時使用數百個甚至數千個線程,每個線程需要一段固定的時間。針對固定池的Java執行程序服務

什麼應該是線程池的大小? - 這個數字是否有一個經驗公式?我明白使用處理器的數量是一個可取的數字。這是設置的最大數量嗎?

+1

這真的取決於任務和瓶頸。如果進程是CPU限制的,那麼答案是「是」。如果涉及IO,答案是「取決於」。 –

+0

https://stackoverflow.com/questions/1980832/java-how-to-scale-threads-according-to-cpu-cores/36723383#36723383 –

回答

1

對於CPU綁定任務,它應該是處理器數量。

int N = Runtime.getRuntime().availableProcessors(); 

對於I/O綁定任務它可以比處理器的數量比較多,因爲某些線程可能不會在I/O密集型任務被利用。您應該估計平均I/O請求的等待時間比率。一旦你得到這個比率RT,你可以使用公式N *(1 + RT),其中N是處理器的數量。

相關問題