CPU

​ CPU(Central Processing Unit)是中央处理单元

​ 物理CPU,物理CPU内核,逻辑CPU

​ 一个物理CPU可以有1个或者多个物理内核

​ 一个物理内核可以作为1个或者2个逻辑CPU

物理CPU

​ 物理CPU就是计算机上实际安装的CPU,物理CPU数就是主板上实际插入的CPU数量

​ 在Linux上查看/proc/cpuinfo,其中的physical id就是每个物理CPU的id,有几个不同的physical id就有几个物理CPU

物理CPU内核

​ 每颗物理CPU可以有1个或者多个物理内核,通常每颗物理CPU的内核数都是固定的

​ 单核CPU就是有1个物理内核,双核CPU就是有2个物理内核

​ 在Linux上查看/proc/cpuinfo,其中的core id就是每颗物理CPU的物理内核id,有几个不同的core id就有几个物理内核

​ 总的CPU物理内核数 = 物理CPU数 * 每颗物理CPU的内核数

逻辑CPU

​ 操作系统可以使用逻辑CPU来模拟真实CPU

​ 在没有多核处理器的时候,一个物理CPU只能有一个物理内核,而现在有了多核技术,一个物理CPU可以有多个物理内核,可以把一个CPU当作多个CPU使用,也就是所谓的逻辑CPU

​ 没有开启超线程时,逻辑CPU的个数就是总的CPU物理内核数。然而开启超线程后,逻辑CPU的个数就是总的CPU物理内核数的两倍

​ 在Linux上查看/proc/cpuinfo,其中的processor就是逻辑CPU,有几个processor就有几个逻辑CPU

​ 总的逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数

​ 总的逻辑CPU数 = 总的CPU物理内核数 * 超线程数

几核几线程

​ 基于上面的基本概念,理解一下常说的几核几线程

​ 如果计算机有一个物理CPU,是双核的,支持超线程,那么这台计算机就是双核四线程。实际上几核几线程中的线程数就是逻辑CPU数

​ 对于两路四核超线程计算机,两路指计算机有2个物理CPU,每颗CPU中有4个物理内核,CPU支持超线程,就有242=16个逻辑CPU,这就是通常所谓的16核计算机

Python查看核心数

from multiprocessing import cpu_count

print(cpu_count()) # 查看逻辑CPU数,线程数

进程与线程

​ 进程是程序的一次执行过程,是一个动态概念,是程序在执行过程中分配和管理资源的基本单位

​ 线程是CPU调度和分派的基本单位,它可与同属一个进程的其他的线程共享进程所拥有的全部资源

​ 线程是进程的一部分,一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程

​ 根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

REFERENCE

https://zhuanlan.zhihu.com/p/591815544

https://z197.com/blog/four-cores-eight-logical-processors-how-much.html