并发和并行的区别

写在前面

       并发并行,它们两者只有一"字"之差,它们彼此之间有所关联又常被混淆;但是并发和并行的含义却是不同的。博主也是参考了很多篇文章之后才初露头角,勉强了解了一些。现在将其总结下来,供日后方便查看。

概念

       并发(Concurrency):是指程序含有多个逻辑上的独立执行块,他们可以独立地并行执行,也可以串行执行;
       并行(parallelism):是指程序可以有多个独立执行块(也可能只有一个),他们可以同时执行整个任务的多个部分。

       简单的说: 并行是多线程的一种形式,多线程是并发的一种形式。异步也是并发的一种形式。他们三者之间的关系如下图所示:
并发和并行的区别

1.字面理解

    并发:你有处理多个任务的能力,但不是同时处理,我一个时间只做一个任务;(多个任务同一时间只能有一个被执行)

       如下图:有 A、B、C 三个任务,在同一个时间,只能够执行一个任务。但是多个任务被快速的进行切换,给人造成了它们同时执行的感觉。但在微观来说,并不同同时进行的,只是划分时间段,分别进行执行。

并发和并行的区别
    并行:你有同时处理多个任务的能力,我一个时间可以同时做多个任务。(多个任务可以同时执行)

       如下图:有 A、B、C 三个任务,在同一个时间,这三个任务我同时执行。
并发和并行的区别


并发和并行的着重点就在于:是否同时执行!!!

引用 Rob Pike 的经典描述:

并发是同一时间应对(dealing with)多件事情的能力;
并行是同一时间动手做(doing)多件事情的能力。


2.场景介绍

       场景1: 我朋友是一位教师。与众多教师一样,她极其善于处理多个任务。她虽然每次只能做一件事(同一时间只能处理一个任务),但可以同时处理多个任务(有处理多个任务的能力)。比如:在听一位学生朗读的时候,她可以暂停学生的朗读(暂停即代表切换任务),来维持课堂秩序,或者回答学生的问题。

        答: 这是并发,并不是并行。因为仅有她一个人,某一时刻只能进行一件事情。

       场景2: 如果还有一位助教,则他们中的一位可以来聆听朗读,同时另一位可以来回答学生的问题(聆听朗读、回答问题 视为两个任务,并且满足同时进行。即:多任务同时进行)

        答: 这既是并发,也是并行。(此处我们可以理解为 CPU,一个 CPU 有多个核心,一个核心来聆听朗读、另一个核心来回答问题。两个核心可以同时执行任务)或(也可以理解为,一个团队作为一个整体,多个人同时做不同任务,也可以称之为并行)CPU 多核心其实就已经很形象了

       场景3: 日常吃饭问题:来自知乎大神的形象介绍,只是用来辅助理解一下就行了      【链接:并发与并行的区别
并发和并行的区别


并发和并行的区别,就介绍到此吧

最不喜欢这种咬文嚼字的东西了,烧脑

如果本文对你有所帮助,那就给我点个赞,来个关注呗,谢谢

End