1.协作式任务处理
意思是说一个任务得到了 CPU 时间,除非它自己放弃使用 CPU ,否则将完全霸占 CPU ,所以任务之间需要协作使用一段时间的 CPU ,放弃使用,其它的任务也如此,才能保证系统的正常运行。如果有一个任务死锁,则系统也同样死锁。
2.抢占式任务处理
总控制权在操作系统手中,操作系统会轮流询问每一个任务是否需要使用 CPU ,需要使用的话就让它用,不过在一定时间后,操作系统会剥夺当前任务的 CPU 使用权,把它排在询问队列的最后,再去询问下一个任务。如果有一个任务死锁,系统仍能正常运行。
抢占式多任务处理是将同时进行的各项任务,依照重要程度来排定优先顺序。具有最高优先级的线程就是当前正在运行的那个线程。驻留在CPU内正在运行的线程会在什么时候中止呢?一是属于它的时间片已经到期,二是加入了另一个优先级更高的线程。通过不断从一个线程到另一个线程的切换和线程的迅速执行给人的感觉是线程的执行是同时进行的。线程并非随时需要运行,经常发生的情况是某个线程需要等待用户的输入,另一个线程的信息或等待I/O请求,否则便无法执行下去。有些线程也许本来就处于挂起状态。
这就意味着当一个程序完成一项非常耗时的工作时,Windows允许用户将控制权切换到其他程序上。这本是一件非常棒的设计,但这种抢占式多任务模式未必总是会按照你期望的方式去工作。例如,假如你的程序处理某条特定消息需要花费1~2分钟的时间,的确,在这期间,用户可以切换到其他程序,但是此时用户无法对你的程序做任何操作,这时候用户就会开始抱怨了,马勒戈壁,这程序怎么卡得更妈蛋一样……所以,一定要注意,不要在处理某条消息上耗费太大的时间,这样的用户体验会很差!
3.抢占式任务系统
在抢占式多任务系统中,操作系统必须具有从任何一个运行的程序上取走控制权和使另一个程序获得控制权的能力。一个抢占式系统下运行的应用程序不用担心独占系统,因为系统会合理地给每个运行的任务分配时间块。将这种系统称做抢占式系统是因为它不管在所给时间块内会发生什么事,都抢占运行程序的控制权。Window 95及之后的Windows版本,OS/2和UNIX都是抢占式系统。