【Java多线程系列】基本原理(1)串行、并行、并发

本篇属于【Java多线程系列】文章第一章【基本概念与底层原理】的第一小节内容,我们会对串行、并行以及并发这几个基本概念进行介绍。

我们将以装修房子为例,需要完成三件任务,每件任务的完成花费一定的时间:

(1)墙体拆迁 -> 2天

(2)安装水电线 -> 1天

(3)粉刷、铺地板 -> 3天

串行

【定义】一次只能做一件事情,按照顺序依次执行,后面的代码段必须等到前面代码段的任务执行完毕后才能执行。

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

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

并行

【定义】在同一时刻,多个任务可以同时开始进行,且彼此之间没有依赖关系

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

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

并发

【定义】以交替的方式利用等待某件事情完成的时间来做其他事情

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

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

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

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

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

并发 vs 并行

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

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

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

文末福利

最近各大互联网公司的秋招都陆陆续续开始了,还在找工作的小伙伴可以后台**回复关键字进入对应的秋招/内推/面试群,我给大家整理了各大公司的内推通道、简历模板还有历年的笔试题**,大家要好好准备哦。还可以帮助大家**免费修改简历、模拟面试哦~**

![在这里插入图片描述](https://upload-images.jianshu.io/upload_images/21321751-89fbbf8c7c4f9e63?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

![在这里插入图片描述](https://upload-images.jianshu.io/upload_images/21321751-9e82ede818544bd3?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

![在这里插入图片描述](https://upload-images.jianshu.io/upload_images/21321751-2559bb455a50a0db?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。