windows 核心编程 线程的优先级

每个线程都会被赋予一个从0(最低)到31(最高)的优先级号码.当系统确定将哪个线程分配给CPU的时候,它首先观察优先级为31的线程,并以循环的方式对它们进行系统调用.如果优先级为31的线程可以调度,那么就赋予该线程一个CPU时间片.在该线程的时间片结束的时候,系统要查看是否还有另一个优先级为31的线程可以运行,如果有,它将允许该线程被赋予CPU时间片.

只有优先级为31的线程是可以调度的,系统就绝对不会将优先级为0到30的线程分配给CPU.这种情况称为渴求调度(starvation).这里存在一个问题,是否低优先级的线程永远得不到调用,因为在任何一个时间段内,系统中的大多数线程是不能调用的.例如:如果主线程调用GetMessage函数,而系统发现没有线程可以供它使用,那么系统就暂停进程的线程运行,释放该线程的剩余时间片,并且立即将CPU分配给另一个等待运行的线程.高优先级的线程会抢占低优先级的线程.

当系统引导的时候,它会创建一个特殊的线程,称为0页线程.该线程被赋予优先级0,它是整个系统中唯一的一个在优先级0上运行的线程.当系统中没有任何线程需要执行的时候,0页线程负责将系统中的所有空闲的RAM页面置0.

有几个等级的优先级需要特别注意:

实时优先级:进程中线程必须立即对事件作出响应,以便执行关键时间的任务.该进程中的线程还会抢先于操作系统组件之前运行.使用本优先级类时必须极端小心.

高优先级:进程中的线程必须立即对事件作出响应,以便执行关键时间的任务.Task Manager 在这个类上运行,以便用户可以撤销脱离控制的进程.win2k中加的新优先级

高于正常:进程中的线程在正常优先级与高级优先级之间运行win2k中的新优先级

正常:进程中的线程没有特殊的调度需要.

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值