在多线程编程中,并发(Concurrency)和并行(Parallelism)是两个关键概念,它们的核心区别在于任务执行方式的不同。
目录
1. 并发(Concurrency)
-
定义:多个任务在同一时间段内交替执行(可能共享同一资源),通过快速切换(如时间片轮转)实现“同时进行”的假象。
-
场景:单核 CPU 处理多任务时,通过线程调度实现并发。
-
特点:
-
任务执行是逻辑上的“同时”,物理上仍是顺序执行。
-
适用于 I/O 密集型任务(如网络请求、文件读写),通过避免等待时间提升效率。
-
-
示例:单核 CPU 上,一个线程处理用户输入,另一个线程更新界面,两者交替执行。
2. 并行(Parallelism)
-
定义:多个任务在同一时刻真正同时执行,需要多核/多处理器支持。
-
场景:多核 CPU 或分布式系统中,不同核独立运行不同任务。
-
特点:
-
任务执行是物理上的同时。
-
适用于计算密集型任务(如矩阵运算、大规模数据处理),直接缩短总耗时。
-
-
示例:多核 CPU 上,4 个线程分别处理图像的 4 个区域,同时计算
关键对比
并发 | 并行 | |
---|---|---|
核心 | 逻辑上的“同时” | 物理上的同时 |
依赖 | 任务调度算法(如线程切换) | 多核/多处理器硬件支持 |
场景 | I/O 密集型、高并发服务 | 计算密集型任务 |
目标 | 最大化资源利用率,减少等待 | 最小化任务总耗时 |
关系
-
并行是并发的子集:所有并行都是并发,但并发不一定是并行。
-
实际应用:现代多核 CPU 中,通常结合并发(线程调度)和并行(多核执行)提升性能。
总结
-
并发是“处理多件事的能力”(如同时响应多个用户请求)。
-
并行是“同时做多件事的手段”(如同时计算多个数据块)。