65.9K
CodeProject 正在变化。 阅读更多。
Home

并发 vs 并行

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.83/5 (19投票s)

2018 年 11 月 21 日

CPOL

4分钟阅读

viewsIcon

44104

本文将解释并发和并行的区别。 长期以来,并发与并行一直是一个备受争议的话题。

目录

实际并行与感觉上的并行

IT行业中的技术术语有时非常令人困惑,而“并发”和“并行”就是其中之一。 许多开发人员认为“并发和并行意味着同时执行”,这没错,但有一个很大的不同。

  • 并发给你一种并行的感觉,而并行,顾名思义,是实际的并行。

感觉上的并行 意味着你在 同一个核心上执行多个任务,并且核心在任务之间切换上下文并为它们服务。 你也可以将此称为时间分片/重叠时间段,因为你的单个核心只是将一些时间专用于一个任务,然后将一些时间专用于其他任务。

实际并行 意味着你 在多个核心上并行执行多个任务

注意:“并发是一个更广泛的术语,而并行是它的一个子集”。

映射到现实世界,左图描绘了并行,右图描绘了并发。

为什么是感觉上的并行,而不是实际的并行?

为了实现实际的并行,我们需要专用的核心、独立的内存等等。
我们需要更多资源。

假设我们要显示某个已完成任务的进度条。 现在我们真的不希望有单独的核心来分配用于显示进度。

我们在这里不想要性能,我们希望从生理上来说,最终用户感觉这两个任务是同时发生的。

我们只想击败人眼100 FPS的能力,并产生一种并行的幻觉,而不会给我们的计算机资源带来压力。 但是,假设我们要处理包含数百万条记录的大型 Excel 文件,那么是的,我们希望拥有实际的并行性来实现性能。

并发关乎设计,并行关乎硬件

为了实现并发,我们需要独立地编写我们的应用程序逻辑。 例如,假设您想处理员工数据,其中您想将工资增加 x%,奖金增加 x%。

因此,您可以通过遵循不同的设计将应用程序分解为逻辑单元

设计1

  • 将数据分成50%的大小。
  • 将每个50%作为独立的单元进行处理。

设计2

  • 将奖金计算作为单独的单元进行处理。
  • 将工资计算作为单独的单元进行处理。

设计3

  • 将数据分成50%的大小。
  • 对于每50%的数据,分别处理奖金计算和工资计算。

可以有许多这样的设计和组合。 因此,当您说您的应用程序支持并发时,您的应用程序应该被分解成小的独立单元。

现在,您可以使用这些单元并在一个核心上运行(并发),或者在多个核心上运行(并行)。 因此,并发关乎设计,而对于并行,我们更多地从硬件的角度讨论,2 个核心、3 个核心等等。

如果你试图将每个并发代码都并行运行,你将不必要地消耗资源。 所以问问你自己,你想要一个幻觉(并发),还是想要性能(并行)。

总结

  并发 并行化
基本定义 使用重叠或时间分片在同一个核心上执行多个任务。 在不同的核心上执行多个任务。
目标 在不给资源带来压力的情况下,产生并行的感觉。 实现性能的实际并行。
透视 软件设计:以协作方式组合独立执行的计算。 硬件:并行执行计算。
资源利用率 光线
  • 并行是并发的子集。
  • 并发使并行成为可能。
  • 并发更多地与软件设计有关,而并行更多地与硬件有关。
  • 并发给人一种并行的幻觉,而并行则与性能有关。
  • 并发只需要一个核心,而并行需要至少 2 个核心。

延伸阅读

并发与并行视频

在这里,我们有一些关于并发和并行主题的更多视频学习,观看以下 20 多分钟,坐下来,放松,享受完整的视频:-

进一步阅读,请观看下面的面试准备视频和分步视频系列。

© . All rights reserved.