cpu 多核

 

多处理器 与 多核的区别

 

首先要区分是多核,还是多cpu 这是两种不同的处理器架构,如下:

 

 对于多核心的架构,由于共用一套MMU和cache,所以地址空间是一个,同一时刻只能运行一个进程,此时进程不能并行只能并发。同一个进程下的多线程可以并行执行,因为多线程共享同一套进程空间资源。

 

对于多cpu架构可以支持进程并行。

多核只能支持一个进程内的线程并行。进程并发。

 

多核CPU和多CPU的区别主要在于性能和成本 (?)

一般机器都为单cpu多核,平常说的4核8线程

 

线程和核的关系
线程需要 核 执行,一个核在同一时间只能执行一条线程,这里的核指逻辑核。

决定同时执行线程数的是逻辑核还是物理核
逻辑核心多少个,就可以 “同时” 执行多少线程。

n个物理核,一般有2n个逻辑核,如果只能同时运行物理核数个个线程(n),那超线程技术模拟出来的核有什么用? 况且很多CPU的商品也不标 “逻辑核数”,用的词是 “线程数”,意思应该就是逻辑核心多少个就能同时运行多少个线程(2n)。

x核y线程(y比x大)是什么意思
CPU商品说的2核4线程,指2个物理核,4个逻辑核。4线程就是4个逻辑核的意思。

进程和线程
进程是操作系统层面的概念,线程是CPU层面的东西,CPU真正执行的是线程而不是进程
进程是是静态的概念,是一些资源的集合,比如进程有自己的内存;而线程是动态的概念
进程可以有多个线程,这些线程共享同一份进程的资源
多进程,目前多核的情况下,可以做到多个进程同时执行;当然也就可以做到多个线程同时执行。但是单核的CPU无法做到 “同时”
进程是一定有端口号吗? 不一定,没网络暴露的就没有
————————————————

以下来自:

https://cloud.tencent.com/developer/article/1886157

区分 多CPU && 多核CPU

最早意识到这两个概念可能不一样是在什么时候呢,不是在买电脑的时候哈,是在安装虚拟机的时候。

安装虚拟机的时候,有一步是要我们选择虚拟机的CPU数量和核数的,我当时其实就有点懵,这俩有区别吗?2CPU各2核和1CPU4核有什么不一样吗?这还要选啊?

但是很快就打消了这个疑虑,没有太在意了。现在想想,错过了认知的机会啊。 一个CPU呢,可以由很多的核,但是,它依旧是一个CPU,不会因为它开了8个核就变成了八个CPU。

这里的CPU,是物理CPU,后面就以物理CPU来命名。此外,还有逻辑CPU,逻辑CPU数怎么算呢? 物理CPU数 * 每个CPU核数,如果支持超线程的话,再乘个2。

这些概念先记一下,后面要用。

多个物理CPU,CPU通过总线进行通信,效率比较低。

 

 

多核CPU,不同的核通过L2 cache进行通信,存储和外设通过总线与CPU通信。

 

 

CPU缓存

CPU缓存是位于CPU与内存之间的临时数据交换器,它的容量比内存小的多但是交换速度却比内存要快得多。CPU缓存一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上。

 

 

 

随着多核CPU的发展,CPU缓存通常分成了三个级别:L1,L2,L3。级别越小越接近CPU,所以速度也更快,同时也代表着容量越小。L1 是最接近CPU的, 它容量最小,速度最快,每个核上都有一个 L1 缓存,L1 缓存每个核上其实有两个 L1 缓存, 一个用于存数据的 L1d Cache,一个用于存指令的 L1i Cache。L2 缓存 更大一些,速度要慢一些, 一般情况下每个核上都有一个独立的L2 缓存; L3 缓存是三级缓存中最大的一级,同时也是最慢的一级, 在同一个CPU插槽之间的核共享一个 L3 缓存。

读取数据过程。就像数据库缓存一样,首先在最快的缓存中找数据,如果缓存没有命中则往下一级找, 直到三级缓存都找不到时,向内存要数据。一次次地未命中,代表取数据消耗的时间越长。

计算过程。程序以及数据被加载到主内存;指令和数据被加载到CPU的高速缓;CPU执行指令,把结果写到高速缓存;高速缓存中的数据写回主内存。

 

多CPU && 多核CPU | 多进程 && 多线程 | 并行 && 并发 之间的关系

1、进程的运行不仅仅需要CPU,还需要很多其他资源,如内存啊,显卡啊,GPS啊,磁盘啊等等,统称为程序的执行环境,也就是程序上下文。

2、线程是CPU调度和分配的基本单位,一定要和 进程是操作系统进行资源分配(包括cpu、内存、磁盘IO等)的最小单位 区别清楚。有句话说CPU只能看到线程,可以这么理解,假设我是CPU,我闭着眼,操作系统调度器将一个进程分配给我之后,我拿到进程睁开眼,我看到的是什么?我看到的是进程中的很多线程,那么我现在能调度和分配的是什么?进程?不行,因为我看不到其他进程,何来调度分配,只能调度我看到的那些线程,如果我是4核的话,把线程ABCD分配到核心1234,其他的线程依然要等待分配,至于等待多久,如何分配,暂不在本文讨论范围。

3、多核心技术是将多个一样的CPU放置于一个封装内(或直接将两个CPU做成一个芯片),而英特尔的HT技术(超线程技术)是在CPU内部仅复制必要的资源、让一个核模拟成两个线程;也就是一个实体核心,两个逻辑线程,在一单位时间内处理两个线程的工作,模拟实体双核心、双线程运作。

4、一个进程最多在一个物理CPU上运行(能拿到资源不错了),如果这个CPU的空闲的核大于等于进程的线程数,就安排了,如果不够,那就先安排一部分线程,其余的等着。


多核CPU,可以并行执行多进程、多线程。多线程应该不用我解释了,多进程参考nginx架构。 多个CPU,可以并行执行多进程,自然可以并行多线程。怎么并行多进程呢?要么咱多手动多开几个进程,要么fork出子进程。

Linux下查看CPU相关信息

CPU的信息主要都在/proc/cupinfo中:

# 查看物理CPU个数

cat /proc/cpuinfo|grep "physical id"|sort -u|wc -l

# 查看每个物理CPU中core的个数(即核数)

cat /proc/cpuinfo|grep "cpu cores"|uniq

# 查看逻辑CPU的个数

cat /proc/cpuinfo|grep "processor"|wc -l

# 查看CPU的名称型号

cat /proc/cpuinfo|grep "name"|cut -f2 -d:|uniq

 

Linux查看某个进程运行在哪个逻辑CPU上

ps -eo pid,args,psr

#参数的含义:

pid - 进程ID

args - 该进程执行时传入的命令行参数

psr - 分配给进程的逻辑CPU

例子: [~]

# ps -eo pid,args,psr | grep nginx

9073 nginx: master process /usr/ 1

9074 nginx: worker process 0

9075 nginx: worker process 1

9076 nginx: worker process 2

9077 nginx: worker process 3

13857 grep nginx 3

 

========================================= 

 

这个得分情况讨论,如果是以前单核时代的CPU,那只能同时运行一个进程或者一个线程,因为这个时代的CPU只有一个MMU。
后来出现了多核CPU,假如现在有一个双核CPU,那这个CPU就能同时运行两个线程,但仍然只能同时运行一个进程,因为这个双核CPU仍然只有一个MMU。
再后来,CPU厂商为每个CPU核心配置了MMU,这个时候的CPU就能同时运行多个进程和多个线程。
后来又出现了超线程技术,比如inter的i3-5005u就是一个双核四线程的CPU,这个CPU就能同时运行四个进程,或者同时运行四个线程。
————————————————

 

参考:

https://www.zhihu.com/question/271821176

https://blog.csdn.net/w8y56f/article/details/89816283

https://cloud.tencent.com/developer/article/1886157

https://blog.csdn.net/m0_55935516/article/details/115217208

posted @ 2022-09-09 14:16  redrobot  阅读(806)  评论(0编辑  收藏  举报