9.3.1 串行、并发与并行
计算机执行程序时,如果采用按顺序执行的方式,即仅当一个程序执行完毕,下一个程序才能开始执行,则称为串行(serial)执行。在串行执行方式下,CPU 每次由一个程序独 占使用,只要当前程序还没有结束,下一个程序就不能使用 CPU。这就像排队买东西,营 业员(即 CPU)每次只为一个顾客服务,等前面的顾客走了,后面的顾客才能获得服务。 串行执行方式有一个缺点,即 CPU 的利用率不高。例如,当一个程序正在等待用户输 入,这时 CPU 会在相当长的时间内无事可做;但因为程序还没结束,所以 CPU 又不能去执行别的程序。
为了提高 CPU 的利用率,计算机可以采用这样的执行方式:当程序 P1 因为等待输入或 其他原因而暂时不用 CPU 时,CPU 就去执行另一个程序 P2;当 P1 结束输入时,CPU 再回 去继续执行 P1。
其实这种执行方式并不稀奇,现实中就有很多类似的做法。例如,在邮局的服务窗口前 有多人排队,如果第一个顾客要寄特快专递,需要填写很多信息,这时营业员就处于空闲状 态。假设排在第二的顾客只是想买张邮票,这时如果营业员严格按照排队原则讲究先来后到 的话,那么即使没事做也不能为后面的顾客服务,非得等到第一个顾客的事情处理完毕才接
待第二个顾客。这种方式显然是非常低效的,服务质量很差。相反,如果营业员能够趁第一 个顾客填写信息时抽空为后面的顾客办理业务,就能大大提高服务效率。又如,厨师做菜时, 如果一个菜正在锅里煮着,厨师肯定会去处理第二个菜,而不是非要等到第一个菜做好了才 去做第二个菜。
那么,计算机能不能实现上述执行方式呢? 计算机程序的执行是由操作系统控制的,而现代操作系统都支持“多道程序”或“多任务”,即允许多个程序同时执行。相信读者都有同时运行多个程序的经验:一边打开浏览器 浏览网页,一边打开 MP3 播放器听音乐,一边还挂着 QQ 聊天程序。注意,这里所谓的“同 时”是在宏观意义上使用的。在微观上,一个 CPU 不可能真正“同时”执行程序,因为 CPU 在任一时刻只能执行一条指令。操作系统其实是在让多个程序分时使用 CPU,即 CPU 一会 儿执行 P1 程序的若干条指令,一会儿又转而执行 P2 程序的若干条指令,然后又回到 P1 继 续执行它的指令。总之,CPU 不停地在多个程序之间切换执行。由于 CPU 的运算速度非常 快,用户感觉不到这种切换过程,因此从宏观上看,就好像多个程序在同时执行一样。这种 多个相互独立的程序交叉执行的方式称为并发(concurrent)执行。并发执行的多个程序的 起止时间是交叉重叠的,而不是串行执行方式下的前后相继。
当然,如果计算机系统中有多个处理器(核心是 CPU),那么就可以做到真正的多个程 序“同时”执行,因为各 CPU 可以在同一时刻执行各自的指令。为了与单一 CPU 上的并发 相区别,我们称这种执行方式为并行(parallel)执行。事实上,当今计算机技术的一个发 展方向就是多处理器并行计算。例如,中国的“天河一号”计算机曾经在全球最快计算机排 名中名列第一,它拥有 6144 个通用处理器和 5120 个加速处理器,其二期产品“天河一号 A”更是拥有 14336 个六核处理器、7168 个加速处理器和 2048 个八核处理器。即使在个人计算机领域,如今也普遍采用多核处理器,例如市场上已经有了 8 核处理器。