并发 vs 并行






3.83/5 (19投票s)
本文将解释并发和并行的区别。 长期以来,并发与并行一直是一个备受争议的话题。
目录
实际并行与感觉上的并行
IT行业中的技术术语有时非常令人困惑,而“并发”和“并行”就是其中之一。 许多开发人员认为“并发和并行意味着同时执行”,这没错,但有一个很大的不同。
- 并发给你一种并行的感觉,而并行,顾名思义,是实际的并行。
感觉上的并行 意味着你在 同一个核心上执行多个任务,并且核心在任务之间切换上下文并为它们服务。 你也可以将此称为时间分片/重叠时间段,因为你的单个核心只是将一些时间专用于一个任务,然后将一些时间专用于其他任务。
实际并行 意味着你 在多个核心上并行执行多个任务。
注意:“并发是一个更广泛的术语,而并行是它的一个子集”。
映射到现实世界,左图描绘了并行,右图描绘了并发。
为什么是感觉上的并行,而不是实际的并行?
为了实现实际的并行,我们需要专用的核心、独立的内存等等。 假设我们要显示某个已完成任务的进度条。 现在我们真的不希望有单独的核心来分配用于显示进度。 |
我们在这里不想要性能,我们希望从生理上来说,最终用户感觉这两个任务是同时发生的。
我们只想击败人眼100 FPS的能力,并产生一种并行的幻觉,而不会给我们的计算机资源带来压力。 但是,假设我们要处理包含数百万条记录的大型 Excel 文件,那么是的,我们希望拥有实际的并行性来实现性能。
并发关乎设计,并行关乎硬件
为了实现并发,我们需要独立地编写我们的应用程序逻辑。 例如,假设您想处理员工数据,其中您想将工资增加 x%,奖金增加 x%。
因此,您可以通过遵循不同的设计将应用程序分解为逻辑单元
设计1
- 将数据分成50%的大小。
- 将每个50%作为独立的单元进行处理。
设计2
- 将奖金计算作为单独的单元进行处理。
- 将工资计算作为单独的单元进行处理。
设计3
- 将数据分成50%的大小。
- 对于每50%的数据,分别处理奖金计算和工资计算。
可以有许多这样的设计和组合。 因此,当您说您的应用程序支持并发时,您的应用程序应该被分解成小的独立单元。
现在,您可以使用这些单元并在一个核心上运行(并发),或者在多个核心上运行(并行)。 因此,并发关乎设计,而对于并行,我们更多地从硬件的角度讨论,2 个核心、3 个核心等等。
如果你试图将每个并发代码都并行运行,你将不必要地消耗资源。 所以问问你自己,你想要一个幻觉(并发),还是想要性能(并行)。
总结
并发 | 并行化 | |
基本定义 | 使用重叠或时间分片在同一个核心上执行多个任务。 | 在不同的核心上执行多个任务。 |
目标 | 在不给资源带来压力的情况下,产生并行的感觉。 | 实现性能的实际并行。 |
透视 | 软件设计:以协作方式组合独立执行的计算。 | 硬件:并行执行计算。 |
资源利用率 | 光线 | 高 |
- 并行是并发的子集。
- 并发使并行成为可能。
- 并发更多地与软件设计有关,而并行更多地与硬件有关。
- 并发给人一种并行的幻觉,而并行则与性能有关。
- 并发只需要一个核心,而并行需要至少 2 个核心。
延伸阅读
并发与并行视频
在这里,我们有一些关于并发和并行主题的更多视频学习,观看以下 20 多分钟,坐下来,放松,享受完整的视频:-
进一步阅读,请观看下面的面试准备视频和分步视频系列。