并发和并行之间的区别是什么?
当前回答
我喜欢Rob Pike的演讲:并发不是并行(这更好!)(幻灯片)(谈话)
Rob通常谈论Go,并且通常以直观直观的解释来解决并发与并行的问题!下面是一个简短的总结:
任务:让我们烧掉一堆过时的语言手册!一次一个!
并发:任务有许多并发分解!一个例子:
并行性:如果至少有2个地鼠同时工作或不工作,则前面的配置会并行出现。
其他回答
要补充其他人所说的话:
并发性就像让一个玩杂耍的人玩多个球。不管看起来如何,玩杂耍的人每次只手抓/扔一个球。平行运动是让多个杂耍者同时变戏法。
并发:如果一个处理器解决了两个或多个问题。
并行性:如果一个问题由多个处理器解决。
摘自Robert Love的《Linux系统编程》一书:
并发、并行和竞争线程创建两个相关但不同的现象:并发和相似两者都是苦乐参半的,涉及线程的成本以及它的好处。并发是两个或两个以上的能力要在重叠的时间段中执行的线程。平行度为同时执行两个或多个线程的能力。并发可以在没有并行性的情况下发生:例如,多任务处理在单处理器系统上。并行性(有时强调为真正的并行性)是一种特殊的并发形式,需要多个处理器(或一个能够支持多个引擎的处理器例如GPU)。通过并发,多个线程可以但不一定同时进行。具有并行,线程实际上并行执行,允许多线程程序以利用多个处理器。并发是一种编程模式,一种解决问题的方法。并行性是一种硬件特性,可以通过并发实现。两者都很有用。
这一解释与公认的答案一致。事实上,这些概念远比我们想象的简单。不要认为它们是魔法。并发大约是一段时间,而并行大约是同时进行的。
平行度:让多个线程执行类似的任务,这些任务在数据和资源方面彼此独立。例如:谷歌爬虫可以产生数千个线程,每个线程可以独立完成任务。
并发性:当您在线程之间共享数据和共享资源时,并发性就会显现出来。在事务系统中,这意味着您必须使用一些技术(如锁、信号量等)同步代码的关键部分。
想象一下,通过观看视频教程学习一种新的编程语言。你需要暂停视频,应用代码中所说的内容,然后继续观看。这就是并发性。
现在你是一名职业程序员了。你喜欢在编码时听平静的音乐。这就是平行主义。
正如Andrew Gerrand在GoLang博客中所说
并发是指同时处理许多事情。相似一次做很多事情。
享受