我有一个多线程程序正在四核英特尔i7上运行。当我执行Runtime.getRuntime.availableProcessors()
时,我得到了8,而且我知道这个CPU支持超线程。
然而,当我创建线程时,我的CPU利用率在4个线程上达到100%(即非零),这意味着有4个线程是未使用的。是否有办法在Java中启用超线程?
我有一个多线程程序正在四核英特尔i7上运行。当我执行Runtime.getRuntime.availableProcessors()
时,我得到了8,而且我知道这个CPU支持超线程。
然而,当我创建线程时,我的CPU利用率在4个线程上达到100%(即非零),这意味着有4个线程是未使用的。是否有办法在Java中启用超线程?
这里可以阅读更加详细的讨论和基准测试(点击此处)
$ lscpu
该输出可用于确定实际核心数以及是否启用了超线程。
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 32
On-line CPU(s) list: 0-31
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 45
Stepping: 7
CPU MHz: 2399.995
BogoMIPS: 4799.35
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 20480K
NUMA node0 CPU(s): 0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30
NUMA node1 CPU(s): 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31
实际可达到的并行性将是(插槽数)X(每个插槽的内核数)X(每个内核的线程数)。要确定您的处理器是否支持超线程,您可以使用每个内核的线程参数。