并行与并发哪个快(串行并行并发)

前言

很多刚刚接触多线程编程的同学,可能对串行、并行、并发等基础概念还傻傻分不清,今天就以用一个搬砖工程队,举例给你讲明白!码字不易,别忘了「在看」,「转发」哦。

正文01 串行

串行( Sequential )简单来说就是一次只能做一件事情,而且还得按照顺序依次执行,后面的代码段必须等到前面代码段的任务执行完毕后才能执行。

并行与并发哪个快(串行并行并发)(1)

假设我们目前经费有限,只有一名工人,工人没有三头六臂,因此他需要一件接着一件来完成任务,只有完成一件任务后才能去完成下一件任务。

此时完成总体装修工程,一共需要花费 2 1 3 = 6 天的时间

02 并行

并行( parallelism )指的是在同一时刻,任务可以同时开始进行,彼此之间没有依赖关系。整个周期的总耗时取决于耗时最长的那件事情所需的时间。

并行与并发哪个快(串行并行并发)(2)

假设我们目前经费比较充足,雇佣了三名工人。装修工程的子任务之间没有依赖关系,因此工人们可以对墙体拆迁、安装水电线、粉刷铺地板这三件事情同时开工,每一名工人负责一件任务。

此时完成总体装修工程,总耗时取决于耗时最长的那件事情(在这里就是粉刷、铺地板)所需的时间,因此一共需要花费 3 天的时间

03 并发

并发( concurrency )是以交替的方式利用等待某件事情完成的时间来做其他事情。整个周期的总耗时:在一件任务等待时间内,节省这段等待时间来完成另一件任务。

并行与并发哪个快(串行并行并发)(3)

假设我们目前经费不充足,只能雇佣了一名工人。仔细对粉刷、铺地板这件任务进行分析,发现它其实包含两部分,第一部分是进行粉刷墙壁、铺地板,第二部分是进行风干,分别花费 2 天和 1 天的时间。

粉刷、铺地板=粉刷墙壁、铺地板( 2 天) 风干( 1 天)

在等待房屋风干的时候,工人此时可以去完成其他的任务以节省时间。

在第三天的时候,从宏观角度来看,工人同时做了两件事情,但是微观的角度来看,工人没有三头六臂,其实他只在进行安装水电线的工作。

此时完成总体装修工程,一共需要花费 5 天的时间。

04 并行 VS 并发

并行与并发哪个快(串行并行并发)(4)

根据CPU多路复用的原则,会将CPU的执行时间切分成很多细微的CPU时间片,一个CPU在同一时间只能完成一件任务。

对于单核CPU,当面对多个任务的时候,每个小时间片会执行一个操作,多个操作之间快速切换执行,造成了同时运行的假象。其实CPU在一个时间片内运行某一个线程时,其它线程处于挂起状态,这种方式我们称之为并发。

当系统有一个以上 CPU 时,则线程的操作可以并行开始。当一个 CPU 执行一个线程时,另一个 CPU 可以执行另一个线程,两个线程互不抢占 CPU 资源,他们同时进行,这种方式我们称之为并行。

并发的出现,比传统串行系统提高效率与时间,但带来了额外性能开销,如:系统调度和上下文切换。

多核CPU使并行成为可能,大大提高了处理能力。

最后欢迎关注公众号「程序员大帝」,《Offer收割机》系列持续更新~

创作不易,各位的支持和认可,是我创作的最大动力,我们下篇文章见!

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页