打印
[应用相关]

并发和并行知识

[复制链接]
473|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1)CPU时间片
CPU在某个时间点只能处理一个任务,但当前的操作系统基本都支持多任务的,那么计算机在CPU只有一个的情况下是怎么完成多任务处理的呢?想必解决这个问题的西方人到访过古老的东方,见识到了古代中国救济灾民的手段,即赈灾时会给每个灾民分一点点粮食,不至于饿死但又不能吃饱。想必西方人一定是基于此思路,想出了CPU时间片的方法。当然,这只是个玩笑,不过也有这个可能,谁知道呢。

CPU会给每个进程被分配一个时间片,进程得到这个时间片之后才可以运行,使各个程序从表面上看是同时进行的。在时间片结束时即使进程还在运行,CPU的使用权也将会被收回,该进程将会被中断挂起等待下一个时间片。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换,这样就可以避免CPU资源的浪费。

因此可以得知,在我们使用的计算机中启动的多个程序,从宏观上看是同时运行的,从微观上看由于CPU一次只能处理一个进程,所有它们是轮流执行的,只不过切换速度太快,我们感觉不到罢了,因此CPU的核数越多计算机的处理效率越高。

使用特权

评论回复
沙发
星辰大海不退缩|  楼主 | 2023-12-23 16:33 | 只看该作者
2)并发和并行
这两个概念都可以笼统的解释为多个进程同时运行,但是他们两个的同时并不是同一个概念。

A. 并发(Concurrency)
并发的同时运行是一个假象,CPU在某一个时间点只能为某一个任务来服务,不可能同时处理多任务,现实中我们看到的同时处理多任务,是广义上的同时处理,这是通过计算机的CPU快速的时间片切换实现的。

计算机在运行过程中,有很多指令会涉及 I/O 操作,而 I/O 操作又是相当耗时的,速度远远低于 CPU,这导致 CPU 经常处于空闲状态,只能等待 I/O 操作完成后才能继续执行后面的指令。为了提高 CPU 利用率,减少等待时间,人们提出了一种 CPU 并发工作的理论。

所谓并发,就是通过一种算法将 CPU 资源合理地分配给多个任务,当一个任务执行 I/O 操作时,CPU 可以转而执行其它的任务,等到 I/O 操作完成以后,或者新的任务遇到 I/O 操作时,CPU 再回到原来的任务继续执行。

下图展示了单核CPU上两个任务并发执行的过程:



图3:单核 CPU 执行两个任务

虽然 CPU 在同一时刻只能执行一个任务,但是通过将 CPU 的使用权在恰当的时机分配给不同的任务,使得多个任务在视觉上看起来是一起执行的。CPU 的执行速度极快,多任务切换的时间也极短,用户根本感受不到,所以并发执行看起来才跟真的一样。

【拓展】操作系统负责将有限的 CPU 资源分配给不同的任务,但是不同操作系统的分配方式不太一样,常见的有:

当检测到正在执行的任务进行 I/O 操作时,就将 CPU 资源分配给其它任务。
将 CPU 时间平均分配给各个任务,每个任务都可以获得 CPU 的使用权。在给定的时间内,即使任务没有执行完成,也要将 CPU 资源分配给其它任务,该任务需要等待下次分配 CPU 使用权后再继续执行。
将 CPU 资源合理地分配给多个任务共同使用,能有效避免 CPU 被某个任务长期霸占的问题,可以极大地提升 CPU 资源利用率。

使用特权

评论回复
板凳
星辰大海不退缩|  楼主 | 2023-12-23 16:34 | 只看该作者
B. 并行(Parallelism)
并发是针对单核 CPU 提出的,而并行则是针对多核 CPU 提出的。和单核 CPU 不同,多核 CPU 真正实现了同时执行多个任务,可以在同一时刻同时运行多个进程;并行需要依赖多个硬件资源,单个是无法实现的;并行可以理解为是一个高富帅,出生就有天然的硬件优势,资源多自然办事效率就高。

注意:多核 CPU 内部集成了多个计算核心(Core),每个核心相当于一个简单的 CPU,如果不计较细节,你可以认为给计算机安装了多个独立的 CPU。

多核 CPU 的每个核心都可以独立地执行一个任务,而且多个核心之间不会相互干扰。在不同核心上执行的多个任务,是真正地同时运行,这种状态就叫做并行。

例如,同样是执行两个任务,双核 CPU 的工作状态如下图所示:



图4:双核 CPU 执行两个任务

双核 CPU 执行两个任务时,每个核心各自执行一个任务,和单核 CPU 在两个任务之间不断切换相比,它的执行效率更高。

使用特权

评论回复
地板
星辰大海不退缩|  楼主 | 2023-12-23 16:34 | 只看该作者
C. 并发+并行
上面图 4 中,执行任务的数量恰好等于 CPU 核心的数量,是一种理想状态。但是在实际场景中,处于运行状态的任务是非常多的,尤其是电脑和手机,开机就几十个任务,而 CPU 往往只有 4 核、8 核或者 16 核,远低于任务的数量,这个时候就会同时存在并发和并行两种情况:所有核心都要并行工作,并且每个核心还要并发工作。

例如一个双核 CPU 要执行四个任务,它的工作状态如下图所示:



图5 并发和并行

每个核心并发执行两个任务,两个核心并行的话就能执行四个任务。当然也可以一个核心执行一个任务,另一个核心并发执行三个任务,这跟操作系统的分配方式,以及每个任务的工作状态有关系。

并发针对单核 CPU 而言,它指的是 CPU 交替执行不同任务的能力;并行针对多核 CPU 而言,它指的是多个核心同时执行多个任务的能力。单核 CPU 只能并发,无法并行;换句话说,并行只可能发生在多核 CPU 中。

在多核 CPU 中,并发和并行一般都会同时存在,它们都是提高 CPU 处理任务能力的重要手段。

使用特权

评论回复
5
中国龙芯CDX| | 2023-12-28 09:10 | 只看该作者
并发的同时运行是一个假象,CPU在某一个时间点只能为某一个任务来服务,不可能同时处理多任务,现实中我们看到的同时处理多任务,是广义上的同时处理,这是通过计算机的CPU快速的时间片切换实现的

使用特权

评论回复
6
LOVEEVER| | 2024-1-25 12:51 | 只看该作者
并发是针对单核 CPU 提出的,而并行则是针对多核 CPU 提出的。

使用特权

评论回复
7
chenqianqian| | 2024-1-26 08:45 | 只看该作者
并发是指处理器能够支持最大的单位时间请求量,并行是物理上的同步运行。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

235

主题

1863

帖子

5

粉丝