关于架构:架构之并发和并行

14次阅读

共计 1819 个字符,预计需要花费 5 分钟才能阅读完成。

简介

在古代程序中,咱们常常会应用到两个关键词:并发 concurrency 和并行parallelism,尽管两者的英文单词区别很大,然而翻译成中文之后简直是一样的。尽管中文以其柔美的语法和工整的写法凌驾于英语之上,然而带来的复杂性和翻译的多意性往往会给技术工作者一点点懊恼。

没关系,明天本文为大家解密一下并发和并行的分割和区别。

留神,本文所讲的并发和并行的概念都是指在同一个应用程序中。

并发和并行

事实上除了并发 concurrency 和并行parallelism,还有 2 个状态:并行执行 Parallel Execution 和 并行并发执行 Parallel Concurrent Execution。接下来咱们来别离解说一下他们的区别。

并发 concurrency

大家晓得 java 中有一个十分有用的并发包叫做 java.util.concurrent, 外面有很多十分有用的类,用来解决多线程之间的资源竞争问题。依据并发包的作用,大家应该就能够猜到并发和并行的最大区别在于是否有资源抢占的状况。

咱们来举个最近爆火的打新冠疫苗的例子,在本地没有确诊病例之前,大家都不慌着打疫苗,资源绝对就比拟多,不须要抢,所以不存在并发问题。

然而当一个中央呈现了确诊病例之后,大家都慌了,于是抢着去打疫苗,造成了资源的缓和,于是产生了并发问题。

为了更好的形容这个并发问题,假如咱们有 10 集体排成了两支队伍要去打疫苗,后果只有一个打疫苗的窗口。那么一个很可能的策略就是窗口交替给两个队伍的人打疫苗。咱们做个图来示意:

<img src=”https://img-blog.csdnimg.cn/20210527195139795.png” style=”zoom:50%;” />

上图示意的就是并发 concurrency 的状况,一个窗口同时只能解决一个工作,所以两个队伍在抢夺窗口这个资源。

资源抢夺过程中会产生各种锁的问题,从而须要特地小心。

并行执行 Parallel Execution

并行执行的意思是两个相互不烦扰的工作同时进行。也就是说工作之间并没有资源的竞争关系,所以不会产生锁的问题。如果用在打疫苗的问题上,并行执行就是说当初有两个窗口,每个队列都能够分到一个窗口,不会产生竞争关系。

<img src=”https://img-blog.csdnimg.cn/20210527200221921.png” style=”zoom:50%;” />

并行执行是程序执行中最现实的状况,这种状况下资源是短缺的,只须要思考具体的业务逻辑即可,并不需要思考他们之间的交互和资源占用关系。

并行并发执行 Parallel Concurrent Execution

并行并发执行的的意思就是在并行的过程中还存在着并发。以打疫苗的例子就是,当初有两个体育馆,每个体育馆都只有一个打疫苗的窗口,对于两个体育馆来说他们是并行的。然而对于每个体育馆中的每个窗口来说,又是并发执行的。

<img src=”https://img-blog.csdnimg.cn/20210527200758968.png” style=”zoom:50%;” />

并行并发执行状态应该是个别的应用程序中的根本状态。执行不同工作的线程是并行执行的,他们的资源是隔离的,所以互不影响。然而执行同一个工作的多个线程之间又是并发的,他们之间会抢占资源,所以须要进行并发管制。

并行parallelism

parallelism 和 Parallel 翻译起来如同没有什么太大的区别,后面一个是业余的计算机名称示意并行性,前面一个能够用在任何中央,示意并行。

那么在计算机中,parallelism 指的是什么意思呢?

其实它是指一个工作的可并行水平。比方 5 集体的打疫苗的工作,能够将 5 集体分成 5 个小组,每个小组都能够去争取本人的资源来执行,这其中能够并发也能够并行,这就是并行性 parallelism 的意思。咱们用上面的图来示意:

<img src=”https://img-blog.csdnimg.cn/20210527202048311.png” style=”zoom:50%;” />

总结

讲了这么多,大家明确他们之间的区别了吗?

本文已收录于 http://www.flydean.com/05-concurrency-parallelism/

最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!

欢送关注我的公众号:「程序那些事」, 懂技术,更懂你!

正文完
 0