即使有多年的并发编程经验,有些开发人员也可能无法清楚地理解并发(concurrency)和并行(parallelism)之间的区别。下面我们以一个真实的例子来说明:一家咖啡店。
在这家咖啡店中,一名服务员负责接收订单并使用一台咖啡机进行准备。顾客下订单,然后等待他们的咖啡。
如果服务员很难为所有的顾客服务,而咖啡店想要加快整个流程,一个想法就是雇佣第二个服务员和增加第二台咖啡机,排队的顾客会等待有空的服务员
在这个新流程中,系统的每一个部分都是独立的。咖啡店可以以两倍的速度为消费者提供服务,这是一个咖啡店的并行实现方式。
如果我们想扩大规模,可以一次又一次地增加服务员和咖啡机。然而,这并不是咖啡店扩大规模的唯一设计方案。另外一种方案就是将服务员的工作分开,一个人负责接收订单,另一个人负责研磨咖啡豆,然后在一台机器中冲泡。此外,我们可以将等待订单的顾客引入另外一个队列,而不是在服务一个顾客的时候阻塞整个顾客队列。