Windows等常用操作系统都不是实时性操作系统,所谓不是实时性,意思是你写的程序放在这个操作系统上面运行,当程序需要睡眠2秒时,你的程序睡眠的可能不是2秒,而是2秒后能变为可调度状态,但是如果系统程序多导致系统繁忙,则你的程序可能睡10秒,也可能永远睡在那里。这就是非实时性操作系统。正常的状态下,指明睡眠2秒,会睡眠2秒零几百微秒。通过调节线程调度优先级,可以使本线程响应得比其他线程更快一些。以下总结了一些重要的概念:

1:Windows线程调度时,每个时间片为2ms,线程占用CPU时间片用完会被强制调出。调用Sleep(0)、等待事件等也会让出剩余时间片被调出。至于下一次调度是什么时候没有保证。

2:线程优先级可以在1-31之间调节,数值越大表示优先级越高。优先级高的线程会优先调度。

3:优先级低的线程饥饿数秒未得到调度,系统会自动临时提升优先级到15,之后每调度一次减1,直到优先级减回原值。

4:调用SetPriorityClass能修改进程优先级,可调节为下表中的几种:

5:调用SetThreadPriority能修改线程的优先级,可调节为下表中的几种:

6:进程优先级和线程优先级组合起来,可以算出线程的基础优先级值。基础优先级低于15的线程在饥饿时会被系统临时调节到15。

7:优先级高于15的线程被命名为实时优先级,因为优先级低于它的线程就算饿死也不可能争过它。

8:把线程优先级调节到11时,很少有超过1毫秒的延迟。但是这是一个相对值,在不同的机器、不同的繁忙程度结果是不一样的。

9:调节线程优先级唯一改变的就是 线程从 可调度状态变为运行状态 这个变化所用的时间缩短。

10:优先级高的线程应该大多数时候处于不可调度状态,否则对其他进程的实时性会有较大影响。

Windows操作系统线程调度耍起来的更多相关文章

  1. 操作系统-Windows操作系统的线程调度了解这些

    Windows操作系统支持内核级线程,调度单位是线程,它采用基于动态优先级的,抢占式调度,并结合时间配额的调整来完成调度 一.几个前提知识点 就绪线程按优先级进入相应的就绪队列 系统总是选择优先级最高 ...

  2. Windows操作系统架构

    用户态 用户态有四类组件,这四类组件都是以进程形式存在的,也就是说,它们都有自己的进程地址空间(其实就是一套页表). 1. System Support Processes 这些是固化的进程,也就是说 ...

  3. Windows操作系统下远程连接MySQL数据库

    用Eclipse做一个后台项目,但是数据库不想放在本地电脑,于是买了一个腾讯云服务器(学生有优惠,挺便宜的),装上MySQL数据库,但是测试连接的时候,发现总是连接不是上,但是本地数据库可以连接,于是 ...

  4. Windows操作系统

    Microsoft Windows,是美国微软公司研发的一套操作系统,它问世于1985年,起初仅仅是Microsoft-DOS模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家 ...

  5. 深入解析Windows操作系统笔记——CH1概念和术语

    1.概念和工具 本章主要介绍Windows操作系统的关键概念和术语 1.概念和工具 1.1操作系统版本 1.2基础概念和术语 1.2.1Windows API 1.2.2 服务.函数和例程 1.2.3 ...

  6. Windows操作系统消费者价值亮点

    在讨论Windows操作系统之前,我们先看看消费者是什么. 消费者是产品和服务的最终使用者 ,其购买商品的目的主要是用于个人或家庭需要. 那么消费者的需求是什么,是使用,所以谁能给消费者更好的使用体验 ...

  7. windows进程/线程创建过程 --- windows操作系统学习

    有了之前的对进程和线程对象的学习的铺垫后,我们现在可以开始学习windows下的进程创建过程了,我将尝试着从源代码的层次来分析在windows下创建一个进程都要涉及到哪些步骤,都要涉及到哪些数据结构. ...

  8. 【翻译】《深入解析windows操作系统第6版下册》第10章:内存管理

    [翻译]<深入解析windows操作系统第6版下册>第10章:内存管理(第一部分) [翻译]<深入解析windows操作系统第6版下册>第10章:内存管理(第二部分) [翻译] ...

  9. 检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统

    /** * Author: laixiangran. * Created by laixiangran on 2015/12/02. * 检测访问网页的浏览器呈现引擎.平台.Windows操作系统.移 ...

随机推荐

  1. Python3 open函数

    Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError. 注意:使用 open() 方法一定要保证关闭 ...

  2. Python内存释放

    python自己管理内存,实际上,对于占用很大内存的对象,并不会马上释放. 举例,a=range(10000*10000),会发现内存飙升一个多G,del a 或者a=[]都不能将内存降下来.. de ...

  3. angularjs i18n

    <!doctype html><html ng-app="myApp"><head>    <meta charset="utf ...

  4. Java NIO学习之Buffer

    Bufer的capacity,position和limit: capacity: 表示buffer的容量. position: 写数据到Buffer中时: 表示当前的位置.初始的position值为0 ...

  5. Tensorflow实战系列之三:

    博主也是初学,能力有限,这个完全没想好..

  6. 【整理】QT .pro文件中的变量说明

    注释 以"#"开始的行,直到结束 模板变量 告诉qmake生成哪种makefile TEMPLATE = app 其中 app - 表示该工程建立一个应用程序的makefile.这 ...

  7. Java Script--------问题错误解决意外的终止输入Uncaught SyntaxError: Unexpected end of input解决办法

    错误信息: Uncaught SyntaxError: Unexpected end of input 错误原因: 一般是成对的符号只出现了单只,比如说“”,‘’,{},[]. 解决办法:检查符号是否 ...

  8. SharePoint Framework解决方案管理参考(二)

    博客地址:http://blog.csdn.net/FoxDave 使用外部脚本 在使用现有的JavaScript脚本库时,开发者可以选择将它们包含在web部件代码包中,或者从外部的URL加载.从外部 ...

  9. Python第三章(北理国家精品课 嵩天等)

    一.数字类型及其操作 整数:pow(x,y),想算多大,就算多大:以0b或0B开头表示二进制:以0o或0O开头表示八进制:以0x或0X开头表示十六进制. 浮点数:取值范围-10^308至10^308, ...

  10. axis2设置soap1.1或soap1.2协议

    现在Axis.Axis2都是同时支持SOAP1.1和SOAP1.2的.即在服务器端发布一个WebService服务之后,客户端既可以通过SOAP1.1版本来访问服务器的服务,也可以通过SOAP1.2版 ...