02-程序执行模型
8.1 程序执行模型
“不断发展的系统会增加其复杂性,除非采取措施优化它。”
——Meir Lehman
在20世纪60年代早期,多任务甚至没有出现之前,为计算机编写的程序被限制为顺序执行模型,计算机能够按时间顺序一个接一个地运行指令。这主要是由于硬件在此期间可以处理的指令数量有限。当从真空管转向晶体管,再过渡到集成芯片时,现代计算机使支持在程序中提供多个执行点成为可能。顺序编程模型的时代已经一去不复返了,因为它要求计算机必须等待当前指令执行完毕之后才能执行下一条指令。如今,能够同时准确无误地执行多个任务的计算机已经非常普遍。
当代的计算机能够模拟并发执行模型,其中的一堆指令可以在重叠的时间段内彼此独立执行。在这个模型中,除非它们需要共享或协调某些数据,否则指令不需要彼此等待,并且几乎可以同时运行。如果你分析某些当前流行的软件,那么会发现它会做很多同时发生的事情,如下面的例子所示。
- 即使应用程序在后台连接网络,桌面应用程序仍然可以继续正常工作。
- 某个游戏程序同时更新数千个实体的状态,可在后台播放音乐并保持一致的帧速率。
- 一个科学的、计算量庞大的程序会分割计算过程,以充分利用计算机硬件中的所有内核。
- Web服务器一次处理多个请求以最大化吞吐量。
这些都是一些非常典型的例子,它们催生了开发人员将程序建模为并发过程的需求。并发真正的含义是什么?在8.2节中,我们将定义它。