文章目录
- 1. 逻辑CPU
- 2. 线程数和逻辑CPU个数,内核个数
- 3.线程/进程/多核CPU
- 3.1 线程
- 3.2 多核cpu
- 3.3 进程和线程
1. 逻辑CPU
先查看电脑cpu信息,可以看到,是8个逻辑cpu
2. 线程数和逻辑CPU个数,内核个数
在任务管理器中,看到其实是4个内核,但是逻辑处理器是8个,有多少个逻辑处理器,就说明你的cpu可以同时处理几个线程
线程数=逻辑处理器个数
- 一个
物理CPU
可以有1个或者多个物理内核
, - 一个
物理内核
可以作为1个或者2个逻辑CPU
。
操作系统可以使用逻辑CPU来模拟真实CPU。
在没有多核处理器的时候,一个物理CPU只能有一个物理内核,
有了多核技术,一个物理CPU可以有多个物理内核,可以把一个CPU当作多个CPU使用,即逻辑CPU。
没有开启超线程时,逻辑CPU的个数就是总的CPU物理内核数。
开启超线程后,逻辑CPU的个数就是总的CPU物理内核数的两倍。
实际能看到的2个物理CPU:
实现16个逻辑CPU的原理图:
参考:
- 物理CPU,物理CPU内核,逻辑CPU概念详解
- 或者简书:https://www.jianshu.com/p/6a53819fa89b
3.线程/进程/多核CPU
3.1 线程
from multiprocessing import cpu_count
print(cpu_count())> 8
在python中,使用上述代码可以获取当前系统的逻辑cpu个数,也就是支持并发的线程个数。
3.2 多核cpu
- 左图:多个物理CPU,CPU通过总线进行通信,效率比较低。
- 右图:多核CPU,不同的核通过L2 cache进行通信,存储和外设通过总线与CPU通信
感谢评论区同学的提醒,这里更新一下CPU三级cache的内容,以下内容摘录自:小林coding-图解系统
- CPU 的高速缓存,通常可以分为 L1、L2、L3 这样的三层高速缓存,也称为一级缓存、二级缓存、三级缓存。
- L1缓存是每个CPU核一个,每个 CPU 核心都有一块属于自己的 L1 高速缓存,指令和数据在 L1 是分开存放的,所以 L1 高速缓存通常分成指令缓存和数据缓存。
- L2 高速缓存同样每个 CPU 核心都有
- L3 高速缓存通常是多个 CPU 核心共用的
CPU多个核之间L1和L2 cache是独享的,L3 cache是共享的。
3.3 进程和线程
- 进程是程序的一次执行过程,是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,
- 线程是CPU调度和分派的基本单位,它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
- 联系:线程是进程的一部分,一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程;
- 根本区别:
进程
是操作系统资源分配
的基本单位,而线程
是任务调度和执行
的基本单位
所以对于程序员来说,其实更多时候是和线程打交道,一个程序是一整个进程,程序中可以有多个线程,用来并行进行不同的事情。
参考:
- ✅关于多 CPU、多核和多线程
- cpu的个数、核心数、线程数
- 进程,线程与多核,多cpu之间的关系
- cpu的核数和进程_CPU与核心及进程和线程认识
- How many cores does my computer have?
- What does it mean when we say “4 cores 8 threads”?
- Is there a Mac OS equivalent to the Linux “lscpu”?
macOS下查看cpu信息,类似linux的
lscpu
的指令是:
sysctl -a|grep cpu|grep hw