并发与并行
概述
并发(Concurrency)与并行(Parallelism)是多线程编程中的核心概念,但二者并非同一回事。
- 并发是指多个任务在重叠的时间段内启动、运行和完成,它们之间没有特定的顺序。
- 并行是指多个任务(或单个任务的多个部分)实际上在同一时刻运行(例如在多核处理器上)。
下文将详细阐述这两个概念的具体含义及其区别。
并发 (Concurrency)
并发本质上适用于至少两个或更多任务的场景。当一个应用程序能够同时处理多个任务时,我们将其称为并发应用程序。
虽然这些任务看起来像是同时运行的,但实际上它们可能并非如此。并发利用操作系统的 CPU 时间分片(Time Slicing) 功能:每个任务运行一部分后进入等待状态,当第一个任务等待时,CPU 被分配给第二个任务以完成其部分工作。
因此,操作系统根据任务的优先级分配 CPU 和其他计算资源(如内存),依次处理所有任务并给予它们完成的机会。对于最终用户而言,所有任务似乎是并行运行的,这即为并发。
并行 (Parallelism)
并行并不一定需要两个独立的任务存在。通过使用 CPU 的多核基础架构,系统可以为每个任务或子任务分配一个内核,从而实际上同时运行部分任务或多个任务。
并行性本质上要求硬件具有多个处理单元。在单核 CPU 中,您可能会获得并发性,但无法获得并行性。
核心差异对比
以下是并发与并行之间的显著差异:
| 维度 | 并发 (Concurrency) | 并行 (Parallelism) |
|---|---|---|
| 定义 | 任务在重叠的时间段内启动、运行和完成。 | 任务实际上在同一时刻运行(如多核处理器)。 |
| 本质 | 独立执行进程的组合。 | 同时执行(可能相关的)计算。 |
| 通俗理解 | 一次处理很多事情 (Dealing with lots of things)。 | 一次做很多事情 (Doing lots of things)。 |
| 硬件要求 | 单核或多核均可实现。 | 必须具备多核或多处理单元硬件。 |
应用组合场景
根据硬件环境与任务调度方式,应用程序可能存在以下四种组合情况:
- 仅并发,非并行:应用程序可以同时处理多个任务,但没有两个任务可以同时执行(例如单核 CPU 上的多线程应用)。
- 仅并行,非并发:应用程序利用多核 CPU 同时处理一个任务的多个子任务,但不涉及多个独立任务的调度。
- 既非并行,也非并发:应用程序一次顺序地处理所有任务。
- 既并行,也并发:应用程序在多核 CPU 中同时处理多个独立任务(这是高性能多线程应用的理想状态)。
结语
以上内容涵盖了并发与并行性的核心概念,这是理解 Java 多线程机制及其他并发编程模型的重要基础。
祝您学习愉快!
版权声明:本文为原创文章,版权归 戴老师的博客 所有,转载请联系博主获得授权。
本文地址:https://1diff.fun/archives/bing-fa-yu-bing-xing.html
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。