首页 Windows线程优先级

Windows线程优先级

举报
开通vip

Windows线程优先级 Windows 线程优先级 每个线程都有一个“优先级”,范围是 0~31,0 为最低优先级,31 为最高优先级。当系统决定哪个线 程需要调度的时候,首先查看是否存在优先级为 31 的可调度线程,如果存在,就从中选择一个进行调度。 当该线程的时间片到达之后,系统查看是否存在另一个优先级为 31 的可调度线程,如果存在,就调度它。 只要有一个可调度的优先级为 31 的线程存在,那么系统绝对不会调度优先级为 0~30 的线程,这样 会导致其他线程“饥饿”。 高优先级线程往往“打断”低优先级线程的执行...

Windows线程优先级
Windows 线程优先级 每个线程都有一个“优先级”,范围是 0~31,0 为最低优先级,31 为最高优先级。当系统决定哪个线 程需要调度的时候,首先查看是否存在优先级为 31 的可调度线程,如果存在,就从中选择一个进行调度。 当该线程的时间片到达之后,系统查看是否存在另一个优先级为 31 的可调度线程,如果存在,就调度它。 只要有一个可调度的优先级为 31 的线程存在,那么系统绝对不会调度优先级为 0~30 的线程,这样 会导致其他线程“饥饿”。 高优先级线程往往“打断”低优先级线程的执行。比如,当一个优先级为 15 的线程正在运行,如果此时 系统发现一个优先级比 15 高的线程可以调度,那么该高优先级线程会“打断”那个低优先级线程的执行,哪 怕低优先级的时间片才过了一半。 另外,当系统引导的时候,系统创建一个特殊的线程,称为“zero page”(0 页)线程,该线程是整个 系统中唯一一个优先级为 0(最低)的线程。当系统没有任何线程需要执行的时候,该线程负责将系统中 所有 RAM 页面清零(也就是资源回收)。 线程优先级有一个抽象层的概念。 由于一些历史的原因,微软并没有将线程调度程序的行为完全固定下来。微软没有让应用程序充分利 用调度程序的特性。微软宣称这个调度程序的行为是变化,在编程的时候需要注意。 由这几点可见,你的应用程序可以有自己的调度特性。 Windows API 充分反映了系统调度的一个抽象层。如此,就不会直接与系统的调度程序通信,相反, 可以调用 API 函数,根据系统的版本的不同转换这些参数。这一层,就是线程优先级的抽象层。 下面详细叙述这个抽象层究竟有哪些内容。 对于进程而言,Windows 有一个“优先级类”的概念。这些优先级类作用与进程中的所有线程。Windo ws 2000/XP/2003/Vista 支持 6 个“优先级类”: 1、Real-time:实时 2、High:高 3、Above normal:高于标准 4、Normal:标准 5、Below normal:低于标准 6、Idle:空闲。 一个进程应该避免使用“实时”优先级类,因为使用该优先级类会导致其他进程中的线程很难被调度, 甚至会打断或者抢占系统线程的执行。“高”优先级类也应该尽量避免,除非有特殊的工作需要使用这个优 先级。 当一个进程的“优先级类”被确定以后,就只需要考虑该进程内部各个线程之间的优先级关系。 对于进程中的线程而言,有一个“相对线程优先级”的概念,这可以决定一个进程中多个线程之间的优 先级关系。 Windows 支持 7 种“相对线程优先级”: 1、Time-critical:关键时间(最高的相对线程优先级) 2、Heightest:最高(翻译是这么翻译,但是并不是最高的相对线程优先级) 3、Above normal:高于标准 4、Normal:标准 5、Below normal:低于标准 6、Lowest:最低(翻译是这么翻译,但是并不是最低的相对线程优先级) 7、Idle:空闲 这里并没有提到有关 0~31 的优先级的任何内容。开发者从来不用具体设置一个线程的优先级,也就 是不需要将一个线程优先级设置为 0~31 中的一个。操作系统负责将“优先级类”和“相对线程优先级”映射到 一个具体的优先级上。这种映射方式,是随 Windows 版本的不同而不同的。 以下是 Windows 2000/XP/2003/Vista 的线程优先级映射方式(书上只说是 Vista,但是对比本书第四 版,可知 2000 和 Vista 是一样的): 进程优先级类 线程相对 优先级 Idle Below Normal Normal Above Normal High Real-Time Time-critical 15 15 15 15 15 31 Highest 6 8 10 12 15 26 Above normal 5 7 9 11 14 25 Normal 4 6 8 10 13 24 Below normal 3 5 7 9 12 23 Lowest 2 4 6 8 11 22 Idle 1 1 1 1 1 16 仔细查看该表,现在知道为什么最好不要将“进程优先级类”设置为“实时”了吧,因为一个进程如果具有 “实时”的优先级类,那么该进程中的所有线程的优先级(最低也有 16)比任何具有其他优先级类的进程中 的线程的优先级(最高只有 15)都要高。这样会导致其他优先级类低于“实时”的进程中的线程无法得到调 度。 要注意的是,“优先级类”是一个抽象的概念,是对于一个进程而言的,但是不是说进程是可以调度的, 只有线程是可以调度的。微软提出这个概念,仅仅只是为了帮助你将它与调度程序的内部运行的情况区分 起来。“优先级类”应该是可以影响一个进程中所有线程的优先级的。
本文档为【Windows线程优先级】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_022952
暂无简介~
格式:pdf
大小:69KB
软件:PDF阅读器
页数:3
分类:互联网
上传时间:2013-06-15
浏览量:15