A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lijun6459991   /  2011-12-15 20:17  /  2336 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

提示: 作者被禁止或删除 内容自动屏蔽

2 个回复

倒序浏览
李波 黑马帝 2011-12-15 20:46:35
沙发
程本身不存在调度问题的,调度的是线程。我们可以在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函数可以获取优先级类或相对线程优先级。

评分

参与人数 1技术分 +2 收起 理由
李荣壮 + 2

查看全部评分

回复 使用道具 举报
李波 黑马帝 2011-12-15 21:23:19
藤椅
本帖最后由 李波 于 2011-12-15 21:24 编辑

C#线程优先级的必要性:如果在应用程序中有多个线程在运行,但一些线程比另一些线程重要,该怎么办在这种情况下,可以在一个进程中为不同的线程指定不同的优先级。一般情况下,如果有优先级较高的线程在工作,就不会给优先级较低的线程分配任何时间片,其优点是可以保证给接收用户输入的线程指定较高的优先级。在大多数的时间内,这个线程什么也不做,而其他线程则执行它们的任务。但是,如果用户输入了信息,这个线程就立即获得比应用程序中其他线程更高的优先级,在短时间内处理用户输入事件。

C#线程优先级的规律:高优先级的线程可以完全阻止低优先级的线程执行,因此在改变线程的优先级时要特别小心。线程的优先级可以定义为ThreadPriority枚举的值,即Highest、AboveNormal、Normal、BelowNormal和 Lowest。

注意,每个进程都有一个基本优先级,这些值与进程的优先级是有关系的。给线程指定较高的优先级,可以确保它在该进程中比其他线程优先执行,但系统上可能还运行着其他进程,它们的线程有更高的优先级。因此Windows给自己的操作系统线程指定高优先级。

我空间里还有几篇关于多线程的文章,你可以去看看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马