串行、并行、并发,别再傻傻分不清了!

开足码力,码动人生,微信搜索【 程序员大帝 】,关注这个一言不合就开车的的代码界老司机
本文 GitHub上已经收录 https://github.com/BeKingCoding/JavaKing , 一线大厂面试核心知识点、我的联系方式和技术交流群,欢迎Star和完善

前言

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

正文

01 串行

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

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

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

02 并行

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

在这里插入图片描述

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

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

03 并发

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

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

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

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

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

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

04 并行 VS 并发

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

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

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

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

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


Offer收割机》系列持续更新,也会定期分享互联网常用技术栈相关的文章,GitHub 上已经收录 https://github.com/BeKingCoding/JavaKing ,讲解一线大厂面试要求的核心知识点、并有对标阿里P7级别的成长体系脑图,欢迎加入技术交流群,我们一起有点东西。


在这里插入图片描述


我是一言不合就开车的代码界老司机无忌。创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!
在这里插入图片描述

  • 15
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值