并发(concurrency)与并行(parallesim)是两个经常被混淆的概念。《七周七并发模型》开篇就说明了这两者的区别。
并发程序含有多个逻辑上的独立执行块,它们可以独立地并行执行,也可以串行执行;而并行程序是同时执行整个任务的多个部分,并行程序可能有多个独立的执行块,也可能只有一个。
如果从处理器和任务的角度来讲,粗略的理解可以是:
- 并发是单个处理器执行多个任务,这些任务在重叠的时间段内交叉执行,但在任何一个时间点都只有一个任务在执行。这些任务在逻辑上是同时执行,而实际上是交叉执行的。
- 并行是多个处理器或多核下执行多个任务,这些任务可以同时执行,即同一时间点可以有多个不同的任务在执行。这些任务在物理上是同时执行的。
简单点说就是:并行指物理上同时执行,并发指能够让多个任务在逻辑上交织执行的程序设计。如图1所示。
当然,关于并发与并行,还有很多东西需要了解。有兴趣可以看下Rob Pike的视频“Concurrency Is Not Parallelism”(O网页链接 ),里面最经典的就是那句:Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once.
GCD 深入理解:第一部分
GCD 深入理解:第二部分
GCD使用经验与技巧浅谈
一起来构建Dispatch Groups
Low-Level Concurrency APIs
GCD使用详解 上篇
GCD使用详解 下篇
还在疑惑并发和并行
Concurrency vs Parallelism - What is the difference?
网友评论