最近在了解 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 插槽中直接插拔的那块长方体(正方体)。

Close Look OF CPU Chip

插槽 Sockets

在阅读到 Sockets 的时候,第一个想法是套接字、于是开始再联想 CPUSockets 有什么关系,然后我一个朋友突然查了一下翻译、实际上这个中文的正统翻译是 插座,不得不让我们感慨是谁把 Sockets 翻译成套接字、然后把我们带偏。

CPU 插槽 就是和 CPU 芯片 配套,互为公母的电子器件,通过插槽将 CPU 和主板进行连接、然后发挥其应有的功能。

Close Look OF CPU Sockets

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

参考资料

  1. About processors, chips, sockets, and cores
  2. Differences between physical CPU vs logical CPU vs Core vs Thread vs Socket
  3. CPU是如何制造出来的
  4. What Is Hyper-Threading? - Intel
  5. Hyper-Threading Technology - Intel