【发布时间】:2015-01-29 19:22:37
【问题描述】:
我在调整非阻塞线程池大小时看到的两个最常见的默认值是:
number of threads = number of cores
number of threads = number of cores + 1
但现在我在Vert.x找到了另一个,就是:
number of threads = 2 * number of cores
显然logic behind this value 是因为Java 无法将特定线程固定到特定核心,如果我们设置# threads == # cores,我们可能会浪费一些可用的核心。从理论上讲,通过将# threads 设置为2 * # cores 之类的值,使用所有内核的概率会增加。
我不确定我是否相信这个论点,因为我希望操作系统调度程序尝试找到跨内核的最佳工作分配。它可能不是最佳分布,但我希望它比使用常数乘数更好。
我知道这完全取决于正在执行的任务类型,但是,假设没有阻塞 IO(因此不需要非活动线程等待大量时间来获取资源),2 * # cores 是比默认方法更好的方法# cores?为什么?
【问题讨论】:
-
我怀疑他们开启了超线程,允许您同时在每个内核上运行两个线程。
-
那么问题来了,到底有多少核心? javaspecialists.eu/archive/Issue220.html
标签: java multithreading operating-system jvm vert.x