zoukankan      html  css  js  c++  java
  • Scheduling

    Scheduling Priorities
    线程基本优先级由哪两个因素决定?
    进程的优先级class(有6种)
    进程优先级类下的线程优先级level(每个class下有7种)

    Context Switches
    1、上下文切换分为哪几个步骤?
    调度器为每个优先级维护一个可执行线程队列。
    保存刚刚完成的线程上下文
    将刚刚完成执行的线程放到相应优先级队列尾部
    找到包含就绪线程的最高优先级队列
    删除队列首部的线程,加载它的上下文并执行
    2、哪些原因会导致上下文切换?
    线程用完时间片
    更高优先级的线程已经准备好执行
    运行中的线程发生等待

    Priority Boosts
    1、什么是线程动态优先级?
    动态优先级是调度器确定调度哪个线程的优先级
    2、动态优先级和基本优先级有什么关系?
    初始时,线程的动态优先级和基础优先级相同。操作系统可以提高或降低动态优先级,目的是确保相应和防止线程饥渴。
    提升线程优先级后,调度器会在每过一个时间片时将该优先级降低一级,直到降到基础优先级。线程的动态优先级不会低于其基础优先级
    3、哪些线程可以获得动态优先级提升?
    基本优先级在0到15的线程才会获得优先级提升,基本优先级在16到31之间的线程不会获得优先级提升
    4、哪些情况下会导致线程的动态优先级被提升?
    a.前台窗口相关的进程优先级会被提升,使其大于或等于任何后台进程的优先级。当进程不再处于前台时,优先级会回到原始
    b.当窗口接收定时器消息、鼠标消息、键盘消息等输入时,调度器会提高拥有该窗口的线程的优先级
    c.当阻塞的线程满足等待条件时,调度器会提高线程的优先级

    Priority Invertion
    1、什么情况下会发生优先级反转?如果一个高优先级的线程在等待低优先级线程手里的锁,调度器如何处理?
    调度器会通过随机提高线程优先级处理这个问题。提高低优先级线程的动态优先级,分配时间片使其足以释放锁。如果本次分配的时间片不足以让低优先级线程释放锁,那么低优先级线程在下一轮调度中会再次获得释放锁的机会

    Multiple Processors
    1、多CPU架构分为哪两种?对线程的调度有什么影响?
    多CPU架构分为非统一内存访问(NUMA)和对称式(SMT)
    非对称式的CPU架构,每个CPU都会比其他的CPU更接近内存中的某些部分,使得内存的某些部分会比其他部分访问的更快。系统会在接近所使用内存的CPU上调度线程
    对称式CPU架构SMT,多个CPU连接到单个共享主存。任何线程可以分配给任何的CPU,可以用CPU池让调度的线程并发运行,调度可以按照优先级决定。可以通过设置线程的CPU关联性和设置线程理想CPU来影响调度
    2、如何设置线程的CPU关联性?
    设置线程的CPU关联性主要是用来测试CPU,会降低并发性能。通过设置关联掩码SetProcessAffinityMask来改变线程的CPU关联性
    3、如何设置线程理想CPU?
    可以通过SetThreadIdealProcessorEx 设置线程首选(建议)CPU

  • 相关阅读:
    java中的 equals 与 ==
    String类的内存分配
    SVN用命令行更换本地副本IP地址
    npoi 设置单元格格式
    net core 微服务框架 Viper 调用链路追踪
    打不死的小强 .net core 微服务 快速开发框架 Viper 限流
    net core 微服务 快速开发框架 Viper 初体验20201017
    Anno 框架 增加缓存、限流策略、事件总线、支持 thrift grpc 作为底层传输
    net core 微服务 快速开发框架
    Viper 微服务框架 编写一个hello world 插件02
  • 原文地址:https://www.cnblogs.com/SwiftChocolate/p/14141256.html
Copyright © 2011-2022 走看看