并发和并行的区别

观点一

并行(parallelise)同时刻(某点),并发(concurrency)同时间(某段)

观点二

深入理解计算机系统CSAPP的回答。并发(Concurrency)是说进程B的开始时间是在进程A的开始时间与结束时间之间,我们就说A和B是并发的。并行(Parallel Execution)是并发的真子集,指同一时间两个进程运行在不同的机器上或者同一个机器不同的核心上。

作者:starrynight
链接:https://www.zhihu.com/question/33515481/answer/67962756
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

观点三

如果某个系统支持两个或者多个动作(Action)同时存在,那么这个系统就是一个并发系统。如果某个系统支持两个或者多个动作同时执行,那么这个系统就是一个并行系统。并发系统与并行系统这两个定义之间的关键差异在于“存在”这个词。在并发程序中可以同时拥有两个或者多个线程。这意味着,如果程序在单核处理器上运行,那么这两个线程将交替地换入或者换出内存。这些线程是同时“存在”的——每个线程都处于执行过程中的某个状态。如果程序能够并行执行,那么就一定是运行在多核处理器上。此时,程序中的每个线程都将分配到一个独立的处理器核上,因此可以同时运行。我相信你已经能够得出结论——“并行”概念是“并发”概念的一个子集。也就是说,你可以编写一个拥有多个线程或者进程的并发程序,但如果没有多核处理器来执行这个程序,那么就不能以并行方式来运行代码。因此,凡是在求解单个问题时涉及多个执行流程的编程模式或者执行行为,都属于并发编程的范畴。摘自:《并发的艺术》 — 〔美〕布雷谢斯在豆瓣阅读书店查看:https://read.douban.com/ebook/10034459/

作者:BeginMan
链接:https://www.zhihu.com/question/33515481/answer/105348019
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

观点四

并发:交替或者同时做不同事的能力
并行:同时做不同事的能力

行话解释:
并发:不同代码块交替或者同时执行的性能
并行:不同代码块同时执行的性能

观点五

作者:李运华
链接:https://www.zhihu.com/question/33515481/answer/121050539
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

详细请参考: Concurrency vs. Parallelism
Concurrency

并发的反义词是顺序,concurrency vs sequential,例如:

顺序处理:

你陪女朋友先看电影(Task1),看完后陪女朋友到花店买了一束花(Task2),然后陪女朋友去西餐厅吃烛光晚餐(Task3),这就是“顺序处理”,因为整个过程中只有你这一个处理器,事情只能一件一件的做(要么是你亲自做,要么你要等别人做)。Task1你要花2小时,Task2等花做好你要花30分钟,Task3等菜做好要30分钟,从你开始看电影到开始吃饭,全程需要3小时(假设走路不算时间)。

并发处理:

你陪女朋友先看电影(Task1),同时打电话给花店预定一束花,花店安排人员在20:00送到西餐厅(Task2);同时你打电话给西餐定预定20:00的浪漫烛光晚餐,西餐厅开始给你准备晚餐(Task3);等到你电影看完跑到西餐厅,花也送到了,晚餐也准备好了,你跑过去直接献花吃饭然后开房即可,这就是并发处理。Task1还是2小时,但Task2和Task3也在这2小时完成了,从你开始看电影到开始吃饭,全程只需要2小时,3个任务是并发完成的。秘诀就是有3个处理器了:你、花店、餐厅在同一个时间段内都在做各自的任务。Parallelism

并行的反义词是串行,Parallelism vs Serial,比如说给你一个100万的整形数组,挑出其中最小的值。

串行处理

从数组的第一个开始扫描到最后一个,类似冒泡排序一样

并行处理

将数组分为10组,每组10万个整形,同时扫描10组得到10个数值,然后再将这10个数值排列一下。上面这个简单的例子也可以看出,串行改为并行其实并不那么简单,涉及到任务分解(有先后依赖的任务就不能做到并行)、任务运行(可能要考虑互斥、锁、共享等)、结果合并。以Java的并行垃圾回收器Parallel为例,标记阶段、回收阶段各自可以多线程并行,但不能将回收阶段和标记阶段一起并行,因为回收阶段的处理依赖标记阶段的结果。

0%