
我在 Windows 7 (x64) 機器上運行 Hudson:這只是使用“java -jar hudson.war”啟動。由於某種原因,java 進程僅使用 2 個可用 cpu 中的一個,儘管它正在運行多個執行緒。我很確定作業系統的預設行為是將多執行緒程式的執行緒分佈在CPU上,除非明確告知(如果我沒記錯的話,使用一些SetProcessorAffinity api)。
有沒有辦法告訴java要使用多個CPU?
答案1
通常,java.exe
會自動將執行緒放到不同的CPU上。
如果沒有,可能是因為程式是 I/O 密集型的,而不是 CPU 密集型的,或者是因為執行緒因為同步而無法同時運行。
看http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#perf_scaling了解更多。
您可能需要調試 Hudson 才能知道為什麼它只使用一個處理器。