我有一個程序,它並行運行(全天)任務(任務中沒有I/O要執行),所以我用Executors.newFixedThreadPool(poolSize)
來實現它。Java線程池大小和availableProcessors()
最初,我將poolSize
設置爲Runtime.getRuntime().availableProcessors()
,但由於在同一臺PC上運行了其他進程(32個內核),所以我有點擔心要使用所有可用的內核。
特別是我有十個其他JVM運行相同的程序(在不同的輸入數據上),所以我有點擔心在可用內核之間切換線程可能會有很多開銷,下整體計算。
我該如何決定每個程序/ JVM池的大小?
此外,在我的電腦中,還有其他進程一直在運行(防病毒,備份等)。我是否也應該考慮到這些?
你只擔心自己的計算機上運行此程序?如果是這樣,爲什麼不嘗試一個特定的選擇,查看您的CPU使用情況,並相應地進行調整。也許你可以在這裏發表你的發現。 – BlackVegetable
需要特別注意的是,從Runtime.availableProcessors()''的Javadocs中注意到 - 「在特定的虛擬機調用期間,該值可能會發生變化。」換句話說,這種方法不會做你認爲它的做法。相反,可以通過屬性文件或命令行參數來配置線程池的大小。 – Brian