Win32多线程之线程优先级

   Win32中优先权的概念,用来决定下一个获得CPU时间的线程是谁,较高优先权的线程必然获得较多的CPU时间。关于优先权的完整讨论其实相当复杂,你可以无分轩轾地给予每一个线程相同的优先权,这可能会使你承担不少麻烦,你也可以明智地使用优先权,使自己能够调整程序的执行次序。例如你可以设定你的GUI线程有较高优先权,使它对于用户的反应能够比较平顺一些,或者你可以改变worker线程的优先权,使它们只在系统的闲置时间(idle time ) 里工作。

   Win32优先权是以数值表现的,并以进程的“优先权类别(priority class)”,线程的“优先权层次(priority class)”,线程的“优先权等级(priority level)”和操作系统当时采用

的“动态提升(Dynamic Boost)” 作为计算基准。所有因素放在一起,最后获得一个0-31的数值。拥有最高优先权之线程,即为下一个将执行起来的线程,如果你有一大把worker线程,其“优先权类别”和“优先权层级”都相同,那么就每一个轮流执行。如果你有一个线程总是拥有最高优先权,那么它就永远获得COU时间,别人就都别玩了,这就是为什么必须明智而谨慎地使用优先权的原因。

  优先权类别( Priority Class)

  “优先权类别”是进程的属性之一。这个属性可以表现出这一进程和其他进程比较之下的重要性。Win32提供四种优先权类别,每一个类别对应一个基本的优先权层级。

如下表格展示了四个优先权类别。

  

优先权类别(Priority Class) 基础优先权值(base priority)
HIGH_PRIORITY_CLASS13
IDLE_PRIORITY_CLASS 4
NORMAL_PRIORITY_CLASS7 or 8(有些资料上写7 or 9)
REALTIME_PRIORITY_CLASS24

   大部分程序使用NORMAL_PRIORITY_CLASS。少数情况下才会考虑使用其他类别。例如,Task Manager就是使用HIGH_PRIORITY_CLASS,所以即使其他程序处于非常忙碌的状态下,它也总是能够有所反应。

   如果程序使用IDLE_PRIORITY_CLASS,它就只会在CPU绝对空闲的时候才执行。

  最后一个类别是REALTIME_PRIORITY_CLASS。这个类别用以协助解决一些和时间有密切关系的工作。举个例子,如果有个程序必须反应一个设备驱动程序的行为,而该驱动程序用来实时监控(real-time monitoring)真实世界中的一台仪器,那么将该进程设为这个优先权类别,就可以使它甚至优于核心进程和设备驱动程序,这个优先权类别不应该用于标准GUI程序或甚至于典型的服务器程序。

   优先权类别适用于进程而非线程。你可以利用SetPriorityClass()和GetPriorityClass()来调整和验证其值。


 

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值