并发和并行的区别图解(一文彻底搞懂)

并发和并行的区别图解(一文彻底搞懂)-mikechen的互联网架构

并发和并行的区别,相信很多初出茅庐的程序员都会被问到这个问题吧,这两个概念极容易混淆,今天,我们就来通俗地聊聊并发和并行的区别@mikechen

并发(Concurrent)

当有多个线程在操作时,如果系统只有一个 CPU,则它根本不可能真正同时进行一个以上的线程,它只能把 CPU 运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状态.这种方式我们称之为并发(Concurrent)。

并发和并行的区别图解(一文彻底搞懂)-mikechen的互联网架构

并发,指的是多个事情,在同一段时间段内发生了,大家都在争夺统一资源。再举一个例子:我们可以拿网吧来举例子。

一个网吧每天晚上六点到晚上十点的用户量特别大,这时候可以称之为并发量大。

假如该网吧有100个机子,但是晚上六点到晚上十点却有150人来上网,这时候就有50人无法正常上网,要么该50人在此等待,要么就离开网吧。

网吧处理这个一百五十人的上网请求,不是在同一时刻进行的,而是在一段时间内处理的,其实,这就是并发。

并行

当系统有一个以上CPU时,当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。

并发和并行的区别图解(一文彻底搞懂)-mikechen的互联网架构

我们在玩电脑的时候,计算机可以“同时”运行着音乐软件和IDEA,我们可以边敲代码,边听音乐,计算机同时的在做多件事情。

在单核cpu的计算机中,我们似乎也能“同时”做这些事情,但这不是真正意义上的并行,其底层是由于cpu快速切换执行任务,给我们一种同时运行的错觉而已。

但是,当计算机是多核cpu的时候,当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,可以同时进行,这时候才是真正的“同时”进行,我们称之为并行。

就好比,一个网吧,它有多台电脑可以同时满足多位客户的上网需求,这就是并行,同时进行,互不争抢。

 

并发和并行的区别

并发是指一个处理器同时处理多个任务,并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。

并发是逻辑上的同时发生,而并行是物理上的同时发生。

并行在多处理器系统中存在,而并发可以在单处理器和多处理器系统中都存在,并发能够在单处理器系统中存在是因为并发是并行的假象,并行要求程序能够同时执行多个操作,而并发只是要求程序假装同时执行多个操作(每个小时间片执行一个操作,多个操作快速切换执行)。

并发和并行两者的最大区别:一个是交替执行,一个是同时执行,一图胜千言,如下图所示:

并发和并行的区别图解(一文彻底搞懂)-mikechen的互联网架构

以上!

关注「mikechen的互联网架构」公众号,回复【架构】即可获取mikechen原创99万字进阶架构师300期文章合集

包含:Java多线程与并发系列、分布式架构系列、Spring系列、MySQL系列、微服务系列、Redis系列...等文章合集。

评论交流
    说说你的看法