Appearance
“并行”指系统具备同时执行多个任务的能力,是物理上的同时性,依赖于多核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)