并发和并行之间的区别是什么?
当前回答
太好了,让我用一个场景来展示我的理解。假设有三个孩子:A,B,C。A和B说话,C听。对于A和B,它们是平行的:A: 我是A。B: 我是B。
但对于C来说,他的大脑必须同时进行听A和B的过程,这可能是:我是我A是B。
其他回答
这篇惊人的博客节选:
并发和并行之间的区别:并发是指两个任务可以在重叠的时间段。并行性是指任务在例如在多核处理器上。并发是独立执行进程的组成,而并行是同时执行(可能相关)计算。并发是指同时处理许多事情。相似一次做很多事情。应用程序可以是并发的,但不能是并行的,这意味着它同时处理多个任务,但没有两个任务在同一时刻执行。应用程序可以是并行的,但不能是并发的,这意味着它在多核CPU中同时处理一个任务的多个子任务时间应用程序既不能并行,也不能并发,这意味着它一次一个地、顺序地处理所有任务。应用程序既可以是并行的,也可以是并发的,这意味着它在多核CPU中同时处理多个任务时间
摘自Robert Love的《Linux系统编程》一书:
并发、并行和竞争线程创建两个相关但不同的现象:并发和相似两者都是苦乐参半的,涉及线程的成本以及它的好处。并发是两个或两个以上的能力要在重叠的时间段中执行的线程。平行度为同时执行两个或多个线程的能力。并发可以在没有并行性的情况下发生:例如,多任务处理在单处理器系统上。并行性(有时强调为真正的并行性)是一种特殊的并发形式,需要多个处理器(或一个能够支持多个引擎的处理器例如GPU)。通过并发,多个线程可以但不一定同时进行。具有并行,线程实际上并行执行,允许多线程程序以利用多个处理器。并发是一种编程模式,一种解决问题的方法。并行性是一种硬件特性,可以通过并发实现。两者都很有用。
这一解释与公认的答案一致。事实上,这些概念远比我们想象的简单。不要认为它们是魔法。并发大约是一段时间,而并行大约是同时进行的。
我真的很喜欢这个来自另一个答案的图形表示——我认为它比上面的许多答案更好地回答了这个问题
并行与并发当两个线程并行运行时,它们都同时运行。例如,如果我们有两个线程A和B,那么它们的并行执行将如下所示:
CPU 1:A------------------------>
CPU 2:B------------------------->
当两个线程同时运行时,它们的执行会重叠。重叠可以通过以下两种方式之一发生:线程同时执行(即并行执行,如上所述),或者它们的执行在处理器上交错执行,如下所示:
CPU 1:A---------->B---------->A---------->B--------->
因此,出于我们的目的,并行可以被认为是并发的一种特殊情况
来源:此处的另一个答案
希望这会有所帮助。
并发简单意味着多个任务正在运行(不需要并行)。例如,假设我们在任何时刻都有3个任务:多个任务可能正在运行,或者所有任务可能同时运行。
并行性意味着它们实际上是并行运行的。因此,在这种情况下,三者必须同时运行。
同意:具有共享资源潜力的多个执行流
前任:两个线程竞争I/O端口。
视差:将问题分成多个相似的块。
前任:通过对文件的每一半运行两个进程来解析大文件。