如何确定硬件线程的数量

时间:2010-11-25 08:22:07

标签: java concurrency parallel-processing

硬件线程是什么意思。是否总是可用处理器核心数量的两倍?如何确定Intel Core2 Duo处理器中的硬件线程数?可以通过Java代码确定吗?

3 个答案:

答案 0 :(得分:6)

  

硬件线程是什么意思。

你告诉我们。这不是一个确定的术语。

  

它总是可用处理器核心数量的两倍吗?

啊,现在好像你在谈论hyperthreading,其中CPU内核中的部分冗余被用来“伪造”一个额外的核心。

  

如何确定数量   Intel Core2 Duo中的硬件线程   处理器?可以确定吗?   通过Java代码?

你可以尝试在系统属性中找到一些东西,但它不是标准的(即依赖于JVM和OS)。

就个人而言,我只是使用一个合理的默认值(4或8个线程 - 有一些太多不适合不使用可用内核)并使其可配置。

答案 1 :(得分:3)

绝对不是硬件线程数是内核数量的两倍--AMD处理器没有任何类型的超线程(yet),并且可以在BIOS中关闭超线程(通常是前nehalem处理器,因为它在实践中并没有给你带来太大的收获)。也没有理由为每个核心必须只有两个硬件线程 - Power7系统有4 per core

没有与操作系统或硬件无关的方法来进行这些检查。我所知道的唯一可以查询此信息的库是hardware locality (hwloc)库。它是一个C库,因此从Java调用应该非常简单。

答案 2 :(得分:1)

我想你的意思是CPU的数量。你可以通过以下方式获得:

int N_CPUS = Runtime.getRuntime()。availableProcessors();

如果您计划实现它,则可以使用此值确定线程池中应存在多少个线程。要阅读有关线程池大小的更多信息,可以使用Java in Concurrency,第8.2节。