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


      Windows操作系统支持内核级线程,调度单位是线程,它采用基于动态优先级的,抢占式调度,并结合时间配额的调整来完成调度

    一、几个前提知识点

      就绪线程按优先级进入相应的就绪队列

      系统总是选择优先级最高的就绪线程运行

      同一优先级的各个线程按时间片轮转方式进行调度

      多CPU系统中允许多个线程并行运行

    二、调度时机

    线程调度的引发条件,除了前面提到的公共的4种情况外还有以下两种

      一个线程的优先级改变

      一个线程改变了它的亲和处理机集合(线程可以被处理的处理机的集合,比如这个集合中增加了一个新的处理机)

      前面提到的4种情况也列出来:

      线程正常终止 或 由于某种错误而终止

      新线程创建 或 一个等待线程变为就绪态

      当一个线程由运行态线程变为就绪态

      当一个线程由运行态进入阻塞态

    三、线程优先级(重要)

      Windows使用的三类共32个线程优先级:(优先级和优先数自行查阅概念)

        实时优先级:16-31(一旦确定优先级不再改变

        可变优先级:1-15(优先级可以在一定范围内升高或降低,分为基本优先级和当前优先级

        系统线程:0(物理内存清零的操作等)

    四、时间配额:加粗加硬,理解这个概念非常重要

      时间配额不是一个时间长度值,而是一个被称为配额单位的整数值

      一个线程用完了自己的时间配额时,如果没有其他相同优先级的线程,Windows将重新给该线程分配一个新的时间配额使其继续运行

    五、调度策略

    1、主动切换

      一个正在运行态的线程由于等待I/O结果进入阻塞态,让出CPU,调度程序从就绪队列选择一个新的线程上CPU运行

    2、抢占

      如果刚才被阻塞的线程被唤醒,由于他的优先级高,会抢占CPU取运行,被抢占的线程回到就绪队列

      当线程被抢占时,它被放回相应优先级的就绪队列的队首

      处于实时优先级的线程被抢占时,时间配额被重置为一个完整的时间配额

      处于可变优先级的线程被抢占时,时间配额不变,重新得到CPU后将运行剩下的时间配额

    3、时间配额用完

      时间配额用完的线程,如果优先级降低了,Windows将选择一个优先级更高的线程上CPU

      优先级没有降低的情况下,

        如果队列中有其他的就绪线程,则选择下一个线程执行,A回到原来就绪队列的末尾

        如果队列中没有其他的就绪线程,系统会给当前线程重新分配一个新的时间配额,让他继续运行

    六、优化方案

    提升优先级的情况(只针对可变优先级1-15的线程)

      线程处于就绪态超过了一定的时间还没有运行 (俗称饥饿)

      完成I/O操作的线程

      前台进程中的线程完成一个等待操作

      由于窗口活动而唤醒窗口线程

      信号量或事件等待结束

    特别的,"饥饿线程"的优先级提升

      系统线程"平衡集管理器"每秒钟扫描一次就绪队列,发现是否存在等待时间超过300个时钟中断间隔的线程

    平衡集管理器将这些线程的优先级提升到15,并分配它一个长度值为正常值4倍的时间配额,被提升的线程用完

    它的时间配额后立即衰减到它原先的基本优先级

  • 相关阅读:
    C++ Tr1中的正則表達式
    html中#include file的使用方法
    InstallShield12豪华版破解版下载|InstallShield下载|软件打包工具
    linux-多线程
    使用 ArcGIS Online和APP进行监控操作和数据采集
    西藏印象:时光篇
    西藏印象:夜色篇
    西藏印象:蓝白篇
    hex2bin
    使用openssl的aes各种加密算法
  • 原文地址:https://www.cnblogs.com/yb38156/p/9749715.html
Copyright © 2020-2023  润新知