了解 CPU 之物理核、逻辑核、超线程 | Bottom Up
最近在了解 Memory 和 CPU 的相关内容,遇到了一些名词的解释有些混淆,尤其是在中文语境下、很多人写的文章都用词有误、语意不明带来了很多误解。
在翻阅了许多国外资料后,在此简单总结一下:处理器、物理核、逻辑核、超线程(多线程)、插槽甚至虚拟核的概念。
基础概念
核 Core
实际上,核的概念分为 物理核(Physical Core)
和 逻辑核(Logical Core)
,在我们说多核处理器的时候,其实是有二义性的——我们不知道讲的是多个 物理核
还是 逻辑核
。
- 物理核
- 物理上、真实存在的
核(Core)
,可以在硬件层面上看到数量的核(Core)
- 物理上、真实存在的
- 逻辑核
- 理解上,只是逻辑上存在的
核(Core)
无法通过硬件层面判断出数量 - 实际上,基于
Intel
的超线程技术(Hyper-Threading)
将一个物理核拆分成两个逻辑核,更加高效地执行 CPU 指令以及利用 L1 缓存
- 理解上,只是逻辑上存在的
除此之外,无论是 Linux / Mac 还是 Windows 的资源管理器,我们看到的数量都是逻辑核的数量,计算公式大致如下:
- 物理核数 = 物理核数(Dual Core = 双核 / Quad-Core = 四核)
- 逻辑核数 = 物理核数 or 物理核数 x 2(开启了
HT
)
芯片 Chips
这个就比较具象了,由大量晶体管组成的 集成电路(Integrated Circuit)
,就是我们可以直接从 CPU 插槽中直接插拔的那块长方体(正方体)。
插槽 Sockets
在阅读到
Sockets
的时候,第一个想法是套接字、于是开始再联想CPU
和Sockets
有什么关系,然后我一个朋友突然查了一下翻译、实际上这个中文的正统翻译是插座
,不得不让我们感慨是谁把Sockets
翻译成套接字、然后把我们带偏。
CPU 插槽
就是和 CPU 芯片
配套,互为公母的电子器件,通过插槽将 CPU
和主板进行连接、然后发挥其应有的功能。
进程 Processes [OS]
这个是属于 操作系统(OS)
层面的概念,按照书本语言就是「操作系统资源分配的最小单位」,只需要理解是在 OS
更上层的概念,而非 CPU
的概念即可。
线程 Thread [OS]
这个是属于 操作系统(OS)
层面的概念,按照书本语言就是「CPU 调度的基本(最小)单位」,同上在此不赘述操作系统相关的内容。
超线程 Hyper-Threading
有时候我们谈到 双核四线程
的时候,实质上谈到的就是 超线程技术(Hyper-Threading)
,通过此技术将一个物理核模拟成两个逻辑核,即一个核心里面会有两个线程分别去执行这个核获取到的命令。
Two logical cores can work through tasks more efficiently than a traditional single-threaded core. By taking advantage of idle time when the core would formerly be waiting for other tasks to complete, Intel® Hyper-Threading Technology improves CPU throughput (by up to 30% in server applications).
根据 What Is Hyper-Threading? 这篇官方说明,实际上超线程技术就是更高效地利用 物理核
中的 空闲时间(Idle Time)
,包括但不限于等待任务完成、数据读取的时间,然后将每个线程当做是一个核心交给上层(如操作系统)进行使用。
假设在不开启 HT
的情况下,我们某个程序能占满整个 CPU
的时间、或者说仅有极少的空闲时间,那开启和不开启 HT
是没有区别的。但实际情况下,普通家用或者非特殊用途的服务器都达不到这么高效、所以 HT
能给我们带来一定的收益。
处理器 Processor
处理器的理解就比较灵活、需要我们根据语境进行判断,有时候可以认为是物理上的 CPU 芯片
也可以认为一个 逻辑核
,如果在比较严谨的讨论下、还是用无歧义的话去代替会体验更好一点。
融会贯通
单核多线程
上图也显而易见,一个支持 超线程技术(Hyper-Threading)
的 CPU
物理核心,里面会有两套独立的寄存器但共用剩下的计算单元和缓存,比如 ALU(算术逻辑单元)
和 L1 / L2 缓存
。
反之,若不支持超线程的 CPU
物理核心中只会有一套寄存器,也能通过这个图直观的理解超线程带来的一些效率提升。
多核多线程
四核八线程就很显然是将多个单核两线程的物理核心装在一个 芯片(Chip)
上,没有别的新意。
我的 Mac
- 开启超线程 = HT Enabled = 是
- CPU 芯片数 = Number of Processors = 1
- CPU 物理核数 = Dual-Core = 2
- CPU 逻辑核数 = Dual-Core x 2(HT Enabled) = 4
所以,我们可以说这是一台 双核四线程
的机器,或者不讲究地说这是一台 四核
的机器,毕竟任务管理器显示的是四个核。
P.S. 如果想看这人懂不懂行,就可以问问“这是物理核还是虚拟核?”(掩面逃