线程优先级

 

进程本身不存在调度问题的,调度的是线程。我们可以在Windows任务管理器设置某个进程的优先级类,微软使用优先级类仅仅是使问题简单化。当然,通过优先级类和相对线程优先级的配合,就可以得到线程的优先级值(BASE PRIORITY LEVEL)。

Windows系统有0~31共32个优先级值。大于15以上的优先级全部是Real-time级优先级,这是最高的优先级类,通常会首先调度这些优先级的线程。High、Normal、Idle这些优先级就是平时很常用的优先级类了。我们通常是使用Normal级。

Windows会自动微调线程的优先级,以至于低优先级的不至于太“饥饿”而分配不到CPU时间。系统可以将低优先级的线程自动调到15优先级值,分配完CPU时间之后,再将它的优先级值设回原来的优先级值。但是系统只会微调Normal优先级类的进程的线程。Real-time等都不会进行自动调度。

通常程序改变自身优先级的方法是使用SetPriorityClass、SetThreadPriority等API函数。通过GetPriorityClass、GetThreadPriority函数可以获取优先级类或相对线程优先级。

ThreadPriority

另外,发现一个特别严重的问题。Windows7下面,使用CreateToolhelp32Snapshot函数,参数设置为TH32CS_SNAPTHREAD和GetProcessId(),获取自身进程的线程列表快照,但是却返回的是整个系统的线程快照。另外,居然可以这种方式可以挂起High完整性级别的进程!这是BUG还是我的错误???百思不得其解。有图有真相,我的系统就是因为这个原因挂了几次了!

ThreadSnapshotError

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值