Java教程

并发&并行的概念

本文主要是介绍并发&并行的概念,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

并发(concurrent)

假设计算机只有一个 CPU,则应用程序可能无法完全同时完成多个任务,但是在应用程序中一次可能要完成多项任务。为了同时完成多个任务,CPU 在执行期间会在不同任务之间进行切换。

类似下面这张图一会执行 Task1 一会执行 Task2,但是并不会一起执行。

可能你看到这张图的时候会惊呼:这不就是多线程的执行方式吗?

是的,这就是多线程的执行方式;注意,这里说的是执行方式。多线程并不等于 CPU,多线程指的是同一个程序中有多个执行的线程,这些线程可能由不同的 CPU 内核处理。


另外值得注意的是:这里不考虑 CPU 超线程技术,所以上图中的两个任务永远不会同一时间开始执行,Task1 或 Task2 必定有一个先执行。

通过上面说的这些,我们可以得出三个重点:

  • 单核 CPU
  • 两个(多个)任务永远不会同一时间开始执行
  • 同时完成多个任务

所以个人理解,并发就是 CPU 执行多任务的一种方式,这些任务交替执行并且大概在相同的时间内完成,但是 CPU 并不是同时执行这些任务。也可以简化为:多个线程轮流使用同一个 CPU 核心,叫做并发。

下图展示了多线程和 CPU 之间的关系:

这里的 CPU 你可以认为是多核 CPU 中某个核心的一个线程或者就是一个单核的 CPU。这里说 “某个核心的一个线程”,是因为 超线程 技术;如果这里只是说某个 CPU 核心,则该核心使用了超线程技术,就有可能会导致两个任务同时开始。
可以简单的理解超线程技术:使某个物理内核实现并行计算。超线程技术我也不是很理解,就知道能并行计算。

并行

先说一下,并发和并行是不一样的。

并行执行是指,计算机有多个 CPU 或一个 CPU 有多个核心,同时执行多个任务。但是,并行执行不等于并行性。

并行执行如下图所示:

并行并发执行

根据 CPU 上分布的不同任务,得出的结论就是:在同一 CPU 上执行的任务是并发执行的,而在不同 CPU 上执行的线程是并行执行的。

这篇关于并发&并行的概念的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!