我最近碰到这个问题就来了一个评估:线程池的大小应该达到最大性能?
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