多线程编程入门指南
1. 多任务处理的演变
计算机实现多任务处理后,情况发生了巨大变化。像运行Unix操作系统的服务器计算机从一开始就具备多任务处理能力,而Windows操作系统直到Windows NT和Windows 95才实现了100%的抢占式多任务处理。
普通的多任务处理是指各个任务相互协作,共同分配资源,但这本质上是一种没有前途的方式,Windows 3.0和Windows 3.1就是典型例子,它们存在很多漏洞。
抢占式多任务处理则是由操作系统控制应用程序的执行内容和时间。应用程序被视为组件,例如,将控制台应用程序的Main()方法重命名为Mains(),就会发现Main()方法实际上是操作系统用于运行组件的API。
操作系统就像一个特殊的程序,它是应用程序启动和管理的基础。操作系统利用微处理器的特殊功能对各个程序进行时间切片,.NET程序作为组件,无需直接访问微处理器。
2. 时间切片
时间切片是指操作系统规定程序的执行时间,在执行时间间隔内,程序处于冻结状态。由于时间切片以微秒为单位,用户通常感觉不到,会认为程序在持续运行。
通过Windows任务管理器的“进程”选项卡可以观察时间切片的情况。例如,explorer.exe占用6%的CPU,意味着它使用了相当于6% CPU时间的时间切片,具体的切片方式由操作系统决定。
假设一个程序运行两个任务(任务1和任务2),在单核心微处理器上,这两个任务会以串行方式运行,因为微处理器本质上是单任