并发与并行

时间:2020-01-09 10:35:50  来源:igfitidea点击:

术语"并发"和"并行性"通常与多线程程序有关。但是并发和并行性到底是什么意思,这两个术语有何不同?

并发(Concurrency)

并发意味着应用程序同时(同时)在多个任务上取得进展。好吧,如果计算机只有一个CPU,则应用程序可能无法在同一时间同时完成一项以上的任务,而是在应用程序中一次要处理多个任务。在开始下一个任务之前,它并没有完全完成一个任务。取而代之的是,CPU在不同任务之间切换,直到任务完成为止。

即使并发应用程序内部仅运行一个线程,也可能会存在一个并发应用程序。顺便说一下,这是我们(Nanosai)Thread Ops工具箱的目标之一。

并行性(Parallelism)

并行性是指应用程序将其任务分解为较小的子任务,这些子任务可以并行处理,例如在多个CPU上完全相同的时间。

为了实现真正的并行性,应用程序必须运行多个线程,或者至少能够调度要在其他线程,进程,CPU,图形卡等中执行的任务。

并发与并行的细节

如我们所见,并发与应用程序如何处理其执行的多个任务有关。应用程序可以一次(顺序)处理一个任务,也可以同时(并行)处理多个任务。

另一方面,并行性与应用程序如何处理每个单独的任务有关。应用程序可以从头到尾顺序处理任务,或者将任务拆分为可以并行完成的子任务。

如我们所见,应用程序可以是并发的,但不能是并行的。这意味着它可以同时处理多个任务,但是线程一次只能执行一个任务。在并行线程/ CPU中没有并行执行的任务。

一个应用程序也可以是并行的,但不能是并发的。这意味着该应用程序一次只能处理一个任务,并且该任务被分解为可以并行处理的子任务。但是,每个任务(+子任务)在拆分下一个任务并并行执行之前已完成。

另外,一个应用程序既不能是并发的,也不能是并行的。这意味着它一次只能处理一个任务,并且该任务永远不会分解为子任务以并行执行。

最后,应用程序也可以是并发和并行的,因为它既可以同时处理多个任务,又可以将每个任务分解为多个子任务以并行执行。但是,在这种情况下,并发性和并行性的某些好处可能会丢失,因为计算机中的CPU已经足够合理地仅使用并发性或者并行性。结合使用它可能只会导致很小的性能提升,甚至会导致性能下降。在盲目采用并发并行模型之前,请确保进行分析和衡量。