目录
实际并行与并行的感觉
为什么感觉并行和为什么不实际?
并发是关于设计,并行是关于硬件
结论
本文将解释并发性和并行性之间的区别。并发与并行主义长期以来一直是一个备受争议的话题。
实际并行与并行的感觉IT行业的技术词汇有时非常混乱,“并发”和“并行”就是其中的一部分。许多开发人员认为“并发和并行意味着同时执行”, 50%是正确的,但有一个很大的区别:
- 并发性让您感觉到并行性而并行性,顾名思义就是实际的并行性。
并行性的感觉意味着您在同一个核心上执行多个任务,核心在任务之间切换上下文并为它们提供服务。你也可以说这有时间切片/重叠时间段,因为你的单核只是将一些时间用于一个任务,然后花一些时间用于其他任务。
实际并行性意味着您可以并行执行多个核心上的多个任务。
注意:“并发是一个更广泛的术语,并行性是它的一个子集”。
映射到现实世界,左图描绘了并行性,右图描绘了并发性。
为了实现实际的并行性,我们需要专用内核,独立内存等。我们需要更多资源。
假设我们想要显示完成某项任务的进度条。现在我们真的不希望分配单独的核心来显示进度。
我们不希望性能在这里,我们希望在生理上最终用户感觉两个任务同时发生。
我们想要击败100 FPS的人眼能力,并在不强调我们的计算机资源的情况下给出并行性的幻觉。但是,假设我们想要处理具有一百万条记录的大型Excel文件,那么我们希望能够实现实际的并行性以实现性能。
并发是关于设计,并行是关于硬件为了实现并发性,我们需要独立地编写应用程序逻辑。例如,假设您希望处理员工数据,您希望将薪水增加x%,将奖金增加x%。
因此,您可以通过遵循不同的设计将应用程序分解为逻辑单元:
设计1
- 将数据分成每个50%的大小。
- 将每个50%作为单独的单元处理。
设计2
- 处理奖金计算作为单独的单位。
- 处理工资计算作为单独的单位。
设计3
- 将数据分成每个50%的大小。
- 分别为每50%数据处理奖金计算和工资计算。
可以有许多这样的设计和组合。因此,当您说您的应用程序支持并发时,您的应用程序应该组成小型独立单元。
现在你采用这些单元并在一个核心(并发)上运行,或者在多个核心上运行(并行)。所以并发性是关于设计的,而在并行性方面,我们从硬件角度讨论更多,2核心,3核心等等。
如果您尝试将每个并发代码作为并行运行,则会不必要地消耗资源。因此,问问自己是否想要一个幻觉(并发)或者你想要表现(并行)。
结论
并发
并行
基本定义
使用重叠或时间切片在同一核心上执行多个任务。
在不同的核心上执行多个任务。
目标
在不强调资源的情况下感受并行性。
性能的实际并行性。
透视
软件设计:以协作方式独立执行计算的组合。
硬件:执行并行计算。
资源利用率
轻
重
- 并行性是并发的一个子集。
- 并发可实现并行性。
- 并发性更多地涉及软件设计,而并行性更多地涉及硬件。
- 并发性给出了并行性的假象,而并行性则与性能有关。
- 并发只需要一个核心,而并行性需要至少2个核心。
原文地址:https://www.codeproject.com/Articles/1267757/Concurrency-vs-Parallelism