cpu thread core
lscpu
[root@localhost ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 24
On-line CPU(s) list: 0-23
Thread(s) per core: 2
Core(s) per socket: 6
座: 2
NUMA 节点: 2
厂商 ID: GenuineIntel
CPU 系列: 6
型号: 44
型号名称: Intel(R) Xeon(R) CPU E5645 @ 2.40GHz
步进: 2
CPU MHz: 2393.991
BogoMIPS: 4787.83
虚拟化: VT-x
L1d 缓存: 32K
L1i 缓存: 32K
L2 缓存: 256K
L3 缓存: 12288K
NUMA 节点0 CPU: 0,2,4,6,8,10,12,14,16,18,20,22
NUMA 节点1 CPU: 1,3,5,7,9,11,13,15,17,19,21,23
[root@localhost ~]# nproc --all
24
含义
上面的信息,有几个比较有意思:
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 2
什么是Socket
Socket就是主板上插CPU的槽的数量
什么是Core
Core就是平时说的核,双核、四核等,就是每个物理CPU上的核数
什么是Thread
thread就是每个core上的硬件线程数,即超线程
对操作系统来说,其逻辑CPU的数量就是SocketCoreThread
总结
- socket是物理插槽,可以插入几个物理CPU
- 每个物理CPU可以分core,也就是几核,比如上面例子的8核。
- 每个core有多少Thread,支持多少个task并行计算。
代码
如果是java 程序,如何判定设置多少个thread呢?
int cores = Runtime.getRuntime().availableProcessors();
System.out.println("core:"+cores);
这句话的意思是:我们可以获得的逻辑CPU的个数(上面例子的24),在实际应用中,测试发现,当设置的线程数为逻辑cpu的个数时,cpu的使用率几乎100%;cpu的使用率基本和设置的逻辑cpu个数成比例。
参考
http://whosemario.github.io/2016/05/20/lscpu-cmd/
https://blog.csdn.net/wutongyuWxc/article/details/78732287