了解 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. 如果想看这人懂不懂行,就可以问问“这是物理核还是虚拟核?”(掩面逃