下面通过一个案例来介绍串行、并发和并行的含义。
假设我们出去旅游,到了一个服务区,这个时候发现我们的水杯中没有水了,我们下车拿着水杯去打水。进了大厅一看,发现这个服务区只有一个饮水机,并且前面有一个大爷拿着一个桶在接水,什么时候大爷的桶接满了我才能接,这就是串行。
串行:当一个任务完成后才能接着执行下一个任务。
这个时候,服务区的管理员过来看见了,发现大爷的这种做法会导致后面来打水的人一直等着。然后管理员就定了一个规则,以后哪怕你拿一个缸来接水,每个人每次只能接10秒钟,10秒后立马换下一个人来接水。这样每个人都能很快的喝到水,这就是并发。
并发:通过时间片轮转(RR)调度机制,每个任务轮流的使用CPU的资源。
随着时间的推移,来这个服务区歇脚的人越来越多,管理员发现即使每个人轮流的去打水,但是饮水机前还是排起了长龙。然后管理员又去买了两台饮水机,这样就可以有三台饮水机同时打水了,从而提高了打水的效率,这就是并行。
并行:多个CPU同时执行任务。
下面据说是Erlang 之父 Joe Armstrong画的一张图,来描述并发和并行的意思。