Skip to content

“并行”指系统具备同时执行多个任务的能力,是物理上的同时性,依赖于多核CPU或多台计算机(分布式系统)的支持;“并发”指系统具备处理多个任务的能力,从逻辑上(宏观上)看,多个任务在同一时间段内都在向前推进执行,但在物理上(微观上)看,在单核CPU上,这些任务是通过CPU时间片轮转等方式快速切换、交替执行的,人们认为它们在同时运行其实是一种感官上的错觉。

并发关注的是任务的结构和调度(如何应对多个事件),使得多个任务看起来在同时进行;并行关注的是任务的执行(如何同时做多件事情),以提升性能。并行是实现并发的一种方式。并发系统可以运行在单核上(不并行),也可以运行在多核上(此时可以并行)。也就是说,如果你有多个CPU核心,你可以通过并行来实现并发任务的真正同时执行。

知识点总结

text
并发 (Concurrency) vs. 并行 (Parallelism)
├── 并发
│   ├── 定义: 系统处理多个任务的能力 (逻辑上同时发生)
│   ├── 核心思想:
│   │   └── 任务分解与调度 (应对多个事件)
│   │   └── 宏观上同时推进,微观上交替执行 (通过时间片轮转等)
│   ├── 硬件要求: 单核CPU即可实现
│   ├── 执行方式: 任务快速切换,轮流使用CPU
│   ├── 目标/关注点:
│   │   └── 提高资源利用率 (尤其在任务等待I/O时)
│   │   └── 提升系统响应性
│   ├── 典型场景:
│   │   └── I/O密集型任务
│   │   └── Web服务器处理多用户请求
│   │   └── GUI应用程序响应用户操作
│   └── 例子: 一个人泡咖啡、回邮件、接电话 (交替做)

├── 并行
│   ├── 定义: 系统同时执行多个任务的能力 (物理上同时发生)
│   ├── 核心思想:
│   │   └── 任务的实际同步执行
│   │   └── 利用多个处理单元加速
│   ├── 硬件要求: 必须有多核CPU、多处理器或分布式集群
│   ├── 执行方式: 多个任务在不同CPU核心上真正同时运行
│   ├── 目标/关注点:
│   │   └── 缩短任务执行总时间
│   │   └── 提高计算吞吐量
│   ├── 典型场景:
│   │   └── 计算密集型任务
│   │   └── 科学计算、大数据分析
│   │   └── 图像/视频处理
│   └── 例子: 多个人同时各自泡一杯咖啡

└── 区别与联系
    ├── 本质区别:
    │   ├── 并发: 逻辑上的"同时" (一段时间内处理多个)
    │   └── 并行: 物理上的"同时" (同一时刻执行多个)
    ├── 硬件依赖:
    │   ├── 并发: 不依赖多核
    │   └── 并行: 依赖多核/多处理器
    ├── 发生时间点:
    │   ├── 并发: 同一时间段内
    │   └── 并行: 同一时刻
    ├── 关系:
    │   ├── 并行是实现并发的一种手段 (尤其在多核环境下)
    │   ├── 可以有并发,但没有并行 (如单核CPU上的多任务)
    │   └── 有并行,必然有并发 (多个任务被同时处理,自然也具备处理多个任务的能力),更准确说:通常并行系统被设计来处理并发任务
    ├── 关注点不同:
    │   ├── 并发: 任务的组织与切换,应对多个事件。
    │   └── 并行: 任务的同步执行,提升性能。
    └── 总结:
        └── 并发: 同时处理许多事情(dealing with lot of things at once)
        └── 并行: 同时做许多事情(doing lot of things at once)