10.3 交替的两种方法
使用一个处理线路执行多项处理,就像两兄弟一起玩一台单人游戏机一样。如果能在彼此都同意的时间间隔内轮流玩,那么也就相当于两人各自在玩一台单人游戏机。“何时交替”可以分为两种情况。
协作式多任务模式——在合适的节点交替
一种方法是在合适的节点自发进行交替。利用这种方法实现的多任务(并发处理)称为协作式多任务模式。
这种方法有一个问题,有可能某个处理一直找不到合适的节点进行任务切换从而持续地进行,导致其他处理无法等到执行的机会。归根结底,采取这种方法是基于一种信任,即所有的处理都会在适当的间隔后进行交替。
再看一下那个游戏机的比喻,如果哥哥一直玩下去不给弟弟玩的话,弟弟无论等多久都玩不上了。这时弟弟估计会向妈妈告状,哥哥会被责怪吧。
Windows 3.1 和 Mac OS 9 都是协作式多任务系统。即使不是有意为之,有时也会遇到程序缺陷进入无限循环,待并发处理的程序完全没有交替,全部程序都变得没有响应了。
抢占式多任务模式——一定时间后进行交替
“何时交替”这个问题的另一种解决方法是隔一定时间就进行交替。这个方法中,有一个比其他程序都具有优势的程序叫任务管理器。它在一定时间后强制中断现在正在进行的处理,以便允许其他程序执行。
还是再来看一下那个游戏机的类比,这好比妈妈每隔十五分钟命令换人玩。换成计算机,它能在人们察觉不到中断发生的间隔时间(比如 20 毫秒或 0.02 秒)实现交替。
利用这种方法实现的多任务称为抢占式多任务模式。所谓抢占就是指能够终止其他人的行为,这种方式和协作式多任务模式不同,它的显著特征在于,不需要被终止程序的协助就可以单方面强制终止它 3。
3preemptive 和 preemption 是军事和法律用语,字典中的解释比较难懂。牛津高阶英语词典中的解释是 done to stop somebody taking action。
Windows 95、Mac OS 以后的版本以及 Unix、Linux 等操作系统都是使用这种方法实现的多个程序的并发处理。
