并发和并行的区别

Posted 向骄阳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发和并行的区别相关的知识,希望对你有一定的参考价值。

总揽

          我们在面试的时候,经常会遇到这样一个问题:并发和并行有什么区别?

          要想回答出这个问题,你首先必须知道,什么是并发?什么是并行?就像回答先有鸡还是先有蛋这个问题之前,你必须认识鸡和蛋。

          我们在进入正题之前,先了解一下计算机的发展史。

        最开始的计算机只有一个处理器,也就是单核,最开始处理任务的模式也是只能处理一个任务,但是这种就比较傻瓜式,比如你在看视频时,就不能同时登微信聊天,简直离谱。

           后来就想着我们是否可以给任务分配一个时间片,时间到了就切换另外一个任务,由于时间片很短,用户的眼睛几乎感觉不到停顿,可以给用户一种“任务并行起来了”的假象。这种交替执行不同任务的方式就是并发。

      后来计算机随着发展,就有了多核处理器,每个核都可以处理一个任务,并且这两个任务之间不需要抢夺时间片,这种方式就是并行。

  紧接着我们分别了解一下并行和并发和概念。 

1、并行

并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行,所以无论从微观还是从宏观来看,二者都是一起执行的。

2、并发

并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行。

我们分别认识了并发和并行之后,就回到了最初的问题:并发和并行的区别是什么?

3、异同点

相同点:

并发和并行的目标都是最大化CPU的使用率,将cpu的性能充分压榨出来。

不同点:

        (1)并行在多处理器系统中存在,而并发可以在单处理器和多处理器系统中都存在

        (2)并行要求程序能够同时执行多个操作,而并发只是要求程序“看着像是”同时执行多个操作,其实是交替执行。

以上是关于并发和并行的区别的主要内容,如果未能解决你的问题,请参考以下文章

Java虚拟机6:垃圾收集(GC)-2(并行和并发的区别)

多线程并发和并行的区别

(转)并行与并发的区别

JAVA多线程与多进程

Java并发编程基础

Java中并发和并行的概念