18910140161

关于 CPU 和 进程、线程的问题?

顺晟科技

2021-06-28 19:38:24

161

看了很多文章,还是没搞懂 多 CPU、多 CPU 核心 和 进程、线程的关系。 最开始个人理解是 多 CPU 是有多个 CPU 芯片(以下的 CPU …

首先作一个假定:下文的cpu代指cpu内核,多内核cpu直接理解成多cpu。

下面开始论述

对cpu而言,没有什么线程进程,只有正在执行的指令。同一个cpu一次只能执行一条指令。

线程进程是os的概念。一个进程包括独立内存空间下的线程和数据

os在调度时会将进程的内存空间映射好,然后胺(笔误,是按)自身逻辑选择适当的线程交给cpu,cpu执行其指令代码。

因此,对cpu来说,既可执行单一进程的指令,也可执行os调度后的不同进程指令。这两者对cpu本身没有任何不同。

对os而言,调度不同进程下的线程时需要切换内存映射,调度同一进程内的线程不需要切换内存映射。

仅此而已

这些都是操作系统的基本概念:

线程,操作系统调度最小单位就是线程,也就是说,无论是a进程的线程,还是B进程的线程,在线程调度器面前都是一样的,调度器会按照一定规则, 安排这一堆线程轮流到CPU上运行。

进程,是操作系统为了方便管理资源的一个容器。简单的理解,就是给多个线程进行分个组,进程就是这个组起的一个名字,跟调度没啥关系。

CPU ,无论是多核CPU,还是多个CPU,操作系统层面,都是把它看成一个可以执行线程的单元。也就是说,如果一台电脑,只有一个CPU,这个CPU是8核的,操作系统的调度器面前,看到的就是有8个执行单元,同一时刻,就可以安排8个线程进行运行。所以操作系统,不看CPU的个数,也不看 CPU的核心数(现代CPU一般还有超线程技术,一个核心还能虚拟成多个执行单元),只看CPU的执行单元有多少个,来决定同一时刻可以安排多少线程运行。

你是多加了一层戏。

CPU和CPU核心不要分成两层理解,你就当作每个CPU单独就是一个核心即可。

至于市面上卖的多核CPU,你就当作买了多个单核CPU即可,它只是正好装在一个盒子里。至于电气上怎么实现的,是卖主板的人实现的,和你无关。

这样就不存在CPU和进程的绑定关系了,每个进程至少会有一个线程,但也可以有多个线程,可以分配给多个核心。

那么一个进程的多个线程,在针对同一份共享的数据操作的时候,就可能存在可见性问题,因为CPU在执行指令的时候,是先将内存里的数据读取到核心内置的缓存里面的,那么刚算出来的结果,未必保证能当场写回主内存,另一个核心不知道有这事,也访问不到其他核心的缓存,必须从内存中读取数据,这就要闯祸。

现代CPU,至少有3层缓存,L1和L2一般是每个核心独有的,但L3缓存就是一整块CPU共享的,到这层就容易出问题了,再往下还有内存,问题更复杂化。

我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航