• Windows操作系统线程调度耍起来


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

  • 相关阅读:
    java判断一个字符串是否包含某个字符
    Java去掉Html标签的方法
    如何转换成utf-8格式的,在jsp页面中正常显示换行
    a标签设置手型
    a标签置灰不可点击
    校验手机号码格式
    用JQuery 判断某个属性是否存在hasAttr的解决方法
    验证手机号码 (包含166和199)
    获取短信验证码倒计时
    Noisy Channel模型纠正单词拼写错误
  • 原文地址:https://www.cnblogs.com/xjjsk/p/10232878.html
Copyright © 2020-2023  润新知