并发(Concurrency) 和 并行(Parallelism) 是计算机科学中两个紧密相关但不同的概念。它们的区别主要体现在任务的执行方式和资源的使用上。
并发(Concurrency)
定义:
- 并发是指在同一时间段内处理多个任务,这些任务可能在某个时间点上交替运行,但不一定同时执行。
- 核心在于任务的交错执行,即多个任务看起来像是同时运行。
特点:
- 单核也可以实现:
- 在单核处理器上,通过任务切换(上下文切换)实现并发。
- 操作系统调度器分配 CPU 时间片给不同的任务,使它们轮流执行。
- 适合 I/O 密集型任务:
- 一个任务等待 I/O 操作(如磁盘或网络)时,处理器可以切换到其他任务。
示例:
- 操作系统中的多任务调度:
- 一个程序在计算(CPU 计算任务),另一个程序在读取文件(I/O 任务)。
- 通过快速切换,让用户感觉两个任务在同时进行。
并行(Parallelism)
定义:
- 并行是指在同一时刻,同时执行多个任务。
- 核心在于真正的同时执行,需要硬件支持(如多核、多处理器)。
特点:
- 需要多核处理器或多处理器:
- 每个任务分配到一个核心或处理器上,并行运行。
- 适合 CPU 密集型任务:
- 例如,大量计算任务分解成多个部分,由多个核心同时处理。
示例:
- 图像处理中的像素计算:
- 将图像划分为多个部分,每个核心同时处理一部分。
并发和并行的对比
| 特性 | 并发 | 并行 |
|---|---|---|
| 定义 | 多个任务==交替执行== | 多个任务==同时执行== |
| 硬件要求 | 不需要多核硬件支持 | 需要多核或多处理器支持 |
| 任务间关系 | 可能是协作的 | 通常是相互独立的 |
| 性能提升 | 通过减少等待时间提升效率 | 通过同时执行任务提升效率 |
| 示例 | 单核多线程的任务切换 | 多核同时计算不同数据 |
处理器多核与流水线的归类
1. 多核处理器
- 多核处理器支持并行:
- 每个核心可以独立执行任务,多个核心协同工作实现真正的并行。
- 例如:四核 CPU 可以同时执行四个独立的任务。
2. 流水线操作
- 流水线属于并发的一种形式:
- 流水线将一个任务拆分为多个阶段,每个阶段可以与其他阶段同时进行。
- 例如:在 CPU 的指令流水线中,取指令(Fetch)、解码(Decode)、执行(Execute)等阶段可以并发执行。
- 任务之间有依赖关系,不同阶段是协作完成一个任务。
总结
- 并发是任务交替运行的感觉,并行是任务真正同时运行。
- 多核处理器适合并行,流水线适合并发。
- 它们可以结合:
- 在多核处理器上,每个核心以并行方式处理任务,同时每个核心内部通过流水线并发完成指令。