wenlong1423
9/20/2014 - 4:36 PM

windows 线程调度.md

  1. 首先,windows是以线程为调度单位的,但有时人们叙述不严谨,有时是一种习惯,特别是叙述单线程进程的时候,会使用进程调度的说法。实际上所有的调度是针对线程的。

  2. 线程被调度时,分为32个优先级数,分别为0~31优先级。线程的优先级不是使用0-31级直接设置的,而是通过进程优先级(分为6级)和线程相对进程优先级(分为7级)来设置的,即需要设置进程优先级和线程相对优先级(通常也称为线程优先级),操作系统会根据这两个优先级确定出线程调度的实际优先级。

  3. windows支持6个进程优先级类(进程是不可调度的,进程优先级是Microsoft提出的一个抽象概念,有助于用户理解,所有的线程优先级是相对于进程优先级的),如下:

优先级类标识符
实时REALTIME_PRIORITY_CLASS
HIGH_PRIORITY_CLASS
高于默认ABOVE_NORMAL_PRIORITY_CLASS
默认NROMAL_PRIORITY_CLASS
低于默认BELOW_NORMAL_PRIORITY_CLASS
空闲IDLE_PRIORITY_CLASS
  1. 线程的相对优先级有7级,分别是:
相对优先级常量标识符
时间关键THREAD_PRIORITY_TIME_CRITICAL
最高THREAD_PRIORITY_HIGHEST
高于默认THREAD_PRIORITY_ABOVE_NORMAL
默认THREAD_PRIORITY_NORMAL
低于默认THREAD_PRIORITY_BELOW_NORMAL
最低THREAD_PRIORITY_LOWEST
空闲THREAD_PRIORITY_IDLE
  1. 线程真正优先级与上面进程优先级、线程相对优先级的对应关系: 进程优先级和线程优先级之间的映射表:
线程相对优先级空闲低于默认默认高于默认实时
Time-critical151515151531
Highest6810121526
Above normal579111425
Normal468101324
Below normal35791223
Lowest24681122
Idle1111116

线程优先级值没有为0的。这是因为0优先级保留给页面清零线程了。对于17,18,19,20,21,27,28,29,30.如果编写一个以内核方式运行的设备驱动程序,可以获得这些优先级的等级,而用户方式的应用程序则不能

转自 看雪安全论坛