并发与并行的区别 The differences between Concurrency and Parallel

逻辑控制流

在程序加载到内存并执行的时候(进程),操作系统会通过让它和其他进程分时段占用CPU(CPU slices)让它产生自己独占CPU的假象(同时通过虚拟内存让它产生独占内存的假象)。在CPU在执行一个进程的指令时,被执行的许多指令连接起来(也可以理解为程序计数器PC的变化)就构成了“逻辑控制流”。

逻辑控制流的概念也不局限于进程,它在异常处理程序、线程、Java进程中均有体现。而“并发(concurrency)”和”并行(parallel)“都是对逻辑控制流而言的。

并发

当两个逻辑控制流交替执行的时候,我们就称它们是”并发(concurrency)“的。更确切的说,对于逻辑控制流A、B,如果B被执行晚于A被执行的开始且早于A被执行的结束,那么A和B就是并发的。例如下图:

其中A和B是并发的,因为B的执行晚于A的开始且早于A的结束。但是B和C就不是并发的,因为C的执行并没有早于B的结束。同理A和C是并发的。

注意到并发和cpu的个数或者计算机的个数是没有关系的,只要两个逻辑流满足上面的关系我们就称它们并发。

并行

如果两个逻辑控制流同时(一个cpu时段内)在不同的cpu(多核)或者计算机上被执行,我们就称其为并行。例如下图:

其中A和C、B和D之间就是并行执行的。

注意到并行要求具有多个处理核心。



另外,我在网上看到一组很有意思的漫画,讲解了并发和并行的区别,分享一下(图片来自https://code.google.com/archive/p/rspace/source/concur/source):

假设一只老鼠正在烧书,其中书就代表要被执行的指令,火炉代表cpu,老鼠把书一本本运送并烧掉的过程就构成了逻辑控制流。

现在有两只老鼠(两个逻辑控制流)在烧书,例如下面这个图,由于只有一个火炉,一个老鼠烧书的时候,另外一个就要等着(保存上下文),直到烧完后轮到他烧(上下文切换),即他们烧书是交替进行的,我们就说他们在并发。(多个火炉满足这样的交替关系我们也可以说他们在并发):

当两只老鼠烧书同时进行时,我们就说它们是并行的,例如下面这个例子,由于有两个火炉(多核),烧书本身可以同时发生:



参考:

  1. 《深入理解计算机系统》第三版
  2. Rob Pike - ‘Concurrency Is Not Parallelism’
时间: 2024-10-11 10:51:11

并发与并行的区别 The differences between Concurrency and Parallel的相关文章

并发和并行的区别

并发和并行的区别就是一个处理器同时处理多个任务和多个处理器或者是多核的处理器同时处理多个不同的任务.前者是逻辑上的同时发生(simultaneous),而后者是物理上的同时发生. 并发性(concurrency),又称共行性,是指能处理多个同时性活动的能力,并发事件之间不一定要同一时刻发生. 并行(parallelism)是指同时发生的两个并发事件,具有并发的含义,而并发则不一定并行. 来个比喻:并发和并行的区别就是一个人同时吃三个馒头和三个人同时吃三个馒头. 并发和并行的区别,布布扣,bubu

[Go] 并发和并行的区别

并发和并行的区别:1.并行是让不同的代码片段同时在不同的物理机器上运行,并行的关键是在不同的物理机器上同时运行 2.并发是同时管理很多事情,比如在一个物理机器上进行不停的调度,有些事情可能只做了一半就被暂停去做别的事情了 3.因为操作系统和硬件总资源一般很少,所以并发的重要性更高,使用较少的资源做更多的事情的哲学也是指导Go语言设计的哲学 原文地址:https://www.cnblogs.com/taoshihan/p/10347104.html

并发与并行 的区别

注:转载出处http://www.cnblogs.com/taven/archive/2012/06/07/2540561.html 并发的英文是 Concurrency,并行的英文是 Parallel,并发与并行是两个不同的概念. 并行是指在同一时刻,有多条指令在多个处理器上同时执行. 并发是指在同一时刻,只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果. 有人做过比喻,要完成吃完三个馒头的任务,一个人可以这个馒头咬一口,那个馒头咬一口,这样交替进行,最

并发与并行的区别

并行(parallel)指在同一时刻,有多条指令在多个处理器上同时执行.就好像两个人各拿一把铁锨在挖坑,一小时后,每人一个大坑.所以无论从微观还是从宏观来看,二者都是一起执行的 并发(concurrency)指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,使多个进程快速交替的执行.这就好像两个人用同一把铁锨,轮流挖坑,一小时后,两个人各挖一个小一点的坑,要想挖两个大一点得坑,一定会用两个小时

浅谈并发和并行的区别

我们就拿电脑的cpu举例吧,我想大家都不陌生吧^-^ 单处理器(cpu)仅支持并发,即运行多个程序的时候并不是一起执行的,中间存在“时间切点”,单对多 双处理器(cpu)同时支持并发和并行,每个线程各自执行自己的程序,多对多 原文地址:https://www.cnblogs.com/xiuxiu1105/p/9917803.html

服务器中并发与并行的区别

在网络服务器上,并发是指同一时刻能处理的连接数,比如,服务器能建立1000个TCP连接,即服务器同时维护了1000个socket,这个服务器的并发量就是1000,但是服务器可能只有单核或者8核,16核等,总之对这1000个socket连接的处理也是分时来做的.每个socket服务器处理的时间如果是1s,那么该服务器1s内可以处理完1000个请求,如果每个socket处理100ms的话,那么该服务器1s内可以处理10000个请求. 并发连接数:网站有时候报错:“HTTP Error 503. Th

并发和并行,异步与多线程区别

1.并发和并行的区别 可由上图形象指出两者的区别: 1)定义: 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行. 并行:在操作系统中,一组程序按独立异步的速度执行,无论从微观还是宏观,程序都是一起执行的. 来个比喻:并发和并行的区别就是一个人同时吃三个馒头和三个人同时吃三个馒头: 在单CPU系统中,系统调度在某一时刻只能让一个线程运行,虽然这种调试机制有多种形式(大多数是时间片轮巡为主

001 并发并行的区别(举例、图例、系统说明)

并发与并行区别 简单举例: 你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行. 你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发. 你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行. 并发的关键是你有处理多个任务的能力,不一定要同时. 并行的关键是你有同时处理多个任务的能力. 所以我认为它们最关键的点就是:是否是『同时』. 并发就是指代码逻辑上可以并行,有并行的潜力,但是不一定当前是真的以物理并行的方式运行. 并发

并发和并行

首先附上参考地址:http://developer.51cto.com/art/200908/141553.htm 当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状态.这种方式我们称之为并发(Concurrent). 当系统有一个以上CPU时,则线程的操作有可能非并发.当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程