一个小例子秒懂并发/并行的区别

身为程序员,我们常常含着属于我们的三高口号——高并发、高性能、高可用。一些新手看到这三个词儿就紧张不已,用有些紧张加崇拜的眼神望着老鸟们。作为学习多线程的第一步,以及后续内容势必多次提到的高频词汇,我们在这里先让大家理解什么是并发?以及另一个略微少提及的并行的基本概念。

非并行非并发

吃饭吃了一半,电话来了,你一直吃饭吃完了以后才去接,这说明你不支持并发也不支持并行。

并发

图片21.png

吃饭吃了一半,电话来了,你停下来接了电话,接完继续吃饭,说明你支持并发。(此处不强调在时间点上同时进行,重点是一段时间内可以交替执行)。

并行

图片23.png

吃饭吃了一半,你一边接电话一边吃饭,这说明你支持并行。

总结

此时不难发现,并行概念可以归纳为并发概念的一个子集并发的关键在于你有处理多个任务的能力,不一定要同时,只要能交替执行。比如单CPU核心下执行多线程并非是同时执行多个任务,如果你开两个线程执行,就是在你几乎不可察觉的速度不断地去切换这两个任务,已达到”同时执行的效果”。其实并没有同时执行,只是计算机执行速度太快我们无法察觉而已。

并行的关键是你有同时处理多个任务的能力。比如依旧是上面的例子。如果此时多加一个CUP。CUP1执行线程1,CUP2执行线程2。那么此时程序就是真正意义的并行。

所以我认为它们最关键的点在于:并发[交替],并行[同时]。

猜你喜欢

转载自blog.csdn.net/weixin_47184173/article/details/115107512
今日推荐