并发(concurrency)
并发描述的是程序的组织结构,指程序要被设计成多个可独立执行的独立程序,并发的关键是程序有处理多个任务的能力,不一定要同时。
正确的并发设计的标准是:使多个操作可以在重叠的时间段内进行(two tasks can start, run, and complete in overlapping time periods)。
上图是一个典型的协程程序, task1, task2 是两个不同的任务,代表两个函数,其中黑色块代表某段代码正在执行。注意,这里从始至终,在任何一个时间点上都只有一段代码在执行,但是,由于 task1 和 task2 在重叠的时间段**内执行,所以这是一个支持并发的设计。与并行不同,单核单线程能支持并发。
以网游为例,需要将客户端服务端数据交换的任务和图形绘制的任务拆分为独立子任务,要让交换一下任务就立即绘制一下图形成为可能。
并行(parallelism)
并行是描述程的执行状态,指多个任务同时在多个CPU上执行。
以网游为例,假如在双核机器上执行,和服务器交互的任务独享一个核心,图形绘制的任务独享一个核心。
最后用 Joe Armstrong 的一张图对并发与并行做一个总结: