并发和并行之间的区别是什么?


当前回答

并发与并行

Rob Pike在《并发不是并行性》中

并发是指同时处理许多事情。

并行是指同时做很多事情。

[并发理论]

并发-一次处理多个任务并行性-一次处理多个线程

我对并发性和并行性的看法

[同步与异步][Swift并发]

其他回答

简单示例:

并发是:“两个队列访问一台ATM机”

并行是:“两个队列和两台ATM机”

“并发”是指同时做任何事情。它们可能是不同的东西,也可能是相同的东西。尽管缺乏公认的答案,但这并不是关于“看起来是在同一时间”,而是真的在同一个时间。您需要多个CPU内核,或者在一个主机内使用共享内存,或者在不同主机上使用分布式内存,以运行并发代码。例如,同时并发运行的3个不同任务的流水线:Task-level-2必须等待Task-level-1完成的单元,而Task-level-3必须等待Task-level-2完成的工作单元。另一个例子是1-生产者与1-消费者的并发;或许多生产者和1-消费者;读者和作家;等

“并行”是指同时做相同的事情。它是并发的,但更重要的是,它是在同一时间发生的相同行为,最典型的是在不同的数据上。矩阵代数通常可以并行化,因为您有重复运行的相同操作:例如,可以使用相同的行为(和)在不同的列上同时计算矩阵的列和。在可用的处理器核之间划分(拆分)列是一种常见的策略,这样每个处理器核处理的工作量(列数)就接近相同。另一种拆分工作的方法是一袋一袋的任务,完成工作的员工会回到经理那里,经理会将工作分配出去,并动态地分配更多的工作,直到所有工作都完成。票务算法是另一种。

不仅仅是数字代码可以并行化。文件太频繁可以并行处理。在自然语言处理应用程序中,对于数百万个文档文件中的每一个,您可能需要计算文档中标记的数量。这是并行的,因为您正在计算每个文件的令牌,这是相同的行为。

换句话说,并行是指同时执行相同的行为。并发意味着同时,但不一定是相同的行为。并行是一种特殊类型的并发,在同一时间发生相同的事情。

例如,术语将包括原子指令、关键部分、互斥、旋转等待、信号量、监视器、屏障、消息传递、map reduce、心跳、铃声、票务算法、线程、MPI、OpenMP。

格雷戈里·安德鲁斯(Gregory Andrews)的著作是关于多线程、并行和分布式编程的顶级教科书。

同意:具有共享资源潜力的多个执行流

前任:两个线程竞争I/O端口。

视差:将问题分成多个相似的块。

前任:通过对文件的每一半运行两个进程来解析大文件。

简单地说,并发就是同时处理很多事情。

“处理”一词用粗体显示了并发和并行之间的区别。同时处理许多事情意味着同时完成许多事情,但它们是否同时执行并不重要。另一方面,并行意味着同时做很多事情(同时执行)。因此,可以使用一个或多个处理资源来实现并发上下文。使用一个处理资源同时处理许多事情意味着通过在任务之间进行上下文切换,可以同时执行许多事情。另一方面,具有许多处理资源的并发上下文意味着进行并行处理。这意味着我们通过并行来实现并发,但反之亦然。

在我的文章中,您可能想了解更多关于并发性和并行性及其与当今技术的关系。

想象一下,通过观看视频教程学习一种新的编程语言。你需要暂停视频,应用代码中所说的内容,然后继续观看。这就是并发性。

现在你是一名职业程序员了。你喜欢在编码时听平静的音乐。这就是平行主义。

正如Andrew Gerrand在GoLang博客中所说

并发是指同时处理许多事情。相似一次做很多事情。

享受