并发,并行,同步,异步

667 阅读3分钟

并发、并行、同步、异步是计算机科学中与多任务处理密切相关的核心概念。它们的关系和区别如下:


1. 基本定义

(1) 并发(Concurrency)
  • 定义:多个任务在时间上重叠执行(可能交替执行),但不一定是同时执行。
  • 特点:通过任务切换(如时间片轮转)实现“看似同时”的效果,常用于单核或多核系统。
  • 例子:单核 CPU 上运行多个线程,通过快速切换模拟同时执行。
(2) 并行(Parallelism)
  • 定义:多个任务真正同时执行,需要多核/多处理器支持。
  • 特点:物理上的同时执行,依赖硬件资源。
  • 例子:多核 CPU 同时处理多个线程。
(3) 同步(Synchronous)
  • 定义:任务按顺序执行,后续任务必须等待前一个任务完成。
  • 特点:任务间存在依赖关系,执行顺序严格。
  • 例子:函数调用后等待返回值,再执行下一行代码。
(4) 异步(Asynchronous)
  • 定义:任务可独立执行,不阻塞后续任务。
  • 特点:通过回调、事件通知等方式实现非阻塞,常用于 I/O 密集型场景。
  • 例子:AJAX 请求发送后,继续执行其他代码,待响应返回再处理。

2. 关键区别

(1) 并发 vs 并行
维度并发并行
执行方式时间重叠(交替执行,时间片)物理同时执行
硬件依赖不依赖多核需要多核/多处理器
目标提高资源利用率提升计算速度
场景I/O 密集型任务CPU 密集型任务
(2) 同步 vs 异步
维度同步异步
执行顺序顺序执行,阻塞等待非阻塞,任务独立执行
控制流线性流程事件驱动或回调驱动
适用场景简单逻辑,强依赖关系高延迟操作(如网络请求)

3. 关系与组合

(1) 并发与同步/异步
  • 并发 + 同步:多个任务交替执行,但需通过锁、信号量等机制保证数据一致性(如多线程同步)。
  • 并发 + 异步:任务交替执行且相互独立(如 Node.js 的事件循环)。
(2) 并行与同步/异步
  • 并行 + 同步:多个任务同时执行,但需在特定点同步(如 MapReduce 中的 Barrier)。
  • 并行 + 异步:任务同时执行且无依赖(如 GPU 并行计算)。

4. 实际应用场景

  • 并发异步:Web 服务器(如 Nginx)处理大量请求,通过异步非阻塞 I/O 实现高吞吐。
  • 并行同步:科学计算中多线程处理数据,最终汇总结果(需同步中间状态)。
  • 并发同步:数据库事务处理,多个线程访问共享资源时加锁。
  • 并行异步:分布式系统中多个节点独立处理任务,结果通过消息队列异步收集。

5. 图示总结

        |------------- 并发 -------------|
任务执行方式:交替(单核) 或 同时(多核)
        |------------- 并行 -------------|

任务协调方式:
同步 —— 顺序等待
异步 —— 独立触发 + 回调/事件

6. 常见误区

  • 并发 ≠ 并行:并发是逻辑上的多任务,并行是物理上的多任务。
  • 异步 ≠ 多线程:异步可通过单线程事件循环实现(如 JavaScript)。
  • 同步 vs 阻塞:同步是程序设计模式,阻塞是线程状态(可能由同步操作引起)。

理解这些概念有助于设计高效的系统架构(如高并发服务器、并行计算框架)和优化程序性能。