我最近碰到這個問題就來了一個評估:線程池的大小應該達到最大性能?
ExecutorService threadpool = Executors.newFixedThreadPool(N);
for(Runnable task : tasks){
threadpool.submit(task);
}
每個任務花費的計算爲25%和75%執行I/O。假設我們正在研究四核機器(無超線程),線程池N的大小應該是多少以達到最大性能而不浪費線程? (假設我們有無限的I/O容量)
我猜測16是因爲機器有無限的I/O意味着我們可以完全專注於CPU。每個任務在運行時使用四分之一的CPU。這意味着,我們可以運行四個任務來飽和一個CPU內核,並使四核機器上的N = 16。
更新:此題的選項分別爲2,4,5,6,7,8,12和16
你的答案是什麼,你是怎麼想出來的,你爲什麼不認爲這是正確的答案? – Andreas
我的回答是16,因爲這臺機器有無限的I/O意味着我們可以完全專注於CPU。每個任務在運行時使用四分之一的CPU。這意味着,我們可以運行四個任務來飽和一個CPU內核,並使四核機器上的N = 16。 – Mickey
聽起來像是對我的正確答案。 – Andreas