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:优先级高的线程应该大多数时候处于不可调度状态,否则对其他进程的实时性会有较大影响。
Windows操作系统线程调度耍起来的更多相关文章
- 操作系统-Windows操作系统的线程调度了解这些
Windows操作系统支持内核级线程,调度单位是线程,它采用基于动态优先级的,抢占式调度,并结合时间配额的调整来完成调度 一.几个前提知识点 就绪线程按优先级进入相应的就绪队列 系统总是选择优先级最高 ...
- Windows操作系统架构
用户态 用户态有四类组件,这四类组件都是以进程形式存在的,也就是说,它们都有自己的进程地址空间(其实就是一套页表). 1. System Support Processes 这些是固化的进程,也就是说 ...
- Windows操作系统下远程连接MySQL数据库
用Eclipse做一个后台项目,但是数据库不想放在本地电脑,于是买了一个腾讯云服务器(学生有优惠,挺便宜的),装上MySQL数据库,但是测试连接的时候,发现总是连接不是上,但是本地数据库可以连接,于是 ...
- Windows操作系统
Microsoft Windows,是美国微软公司研发的一套操作系统,它问世于1985年,起初仅仅是Microsoft-DOS模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家 ...
- 深入解析Windows操作系统笔记——CH1概念和术语
1.概念和工具 本章主要介绍Windows操作系统的关键概念和术语 1.概念和工具 1.1操作系统版本 1.2基础概念和术语 1.2.1Windows API 1.2.2 服务.函数和例程 1.2.3 ...
- Windows操作系统消费者价值亮点
在讨论Windows操作系统之前,我们先看看消费者是什么. 消费者是产品和服务的最终使用者 ,其购买商品的目的主要是用于个人或家庭需要. 那么消费者的需求是什么,是使用,所以谁能给消费者更好的使用体验 ...
- windows进程/线程创建过程 --- windows操作系统学习
有了之前的对进程和线程对象的学习的铺垫后,我们现在可以开始学习windows下的进程创建过程了,我将尝试着从源代码的层次来分析在windows下创建一个进程都要涉及到哪些步骤,都要涉及到哪些数据结构. ...
- 【翻译】《深入解析windows操作系统第6版下册》第10章:内存管理
[翻译]<深入解析windows操作系统第6版下册>第10章:内存管理(第一部分) [翻译]<深入解析windows操作系统第6版下册>第10章:内存管理(第二部分) [翻译] ...
- 检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
/** * Author: laixiangran. * Created by laixiangran on 2015/12/02. * 检测访问网页的浏览器呈现引擎.平台.Windows操作系统.移 ...
随机推荐
- 正则表达式中的re.S
正则表达式中,“.”的作用是匹配除“\n”以外的任何字符,也就是说,它是在一行中进行匹配.这里的“行”是以“\n”进行区分的.a字符串有每行的末尾有一个“\n”,不过它不可见. 如果不使用re.S参数 ...
- 增强for、iterator迭代器
因为初学java,对部分语法还模棱两可, 在做练习的时候,用增强for遍历字符串编译报错 所以来复习下增强for原理和适用范围 一.增强for概念 增强for(也成为for each循环)是JDK 1 ...
- getString与optString的区别
JSONObject.getString("key"):当对象中没有key属性的时候,会抛出No value for "key"的异常: public Stri ...
- Java——继承的运行顺序
首先看一个代码 父类代码: public class Parent { { System.out.println("Parent非静态代码块"); } static { Syste ...
- HashMap 的put方法
final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] ta ...
- L342 Air Pollution Is Doing More Than Just Slowly Killing Us
Air Pollution Is Doing More Than Just Slowly Killing Us In the future, the authorities might need to ...
- 树莓派安装tensorflow1.11
树莓派3B+ 环境:2018-11-13-raspbian-stretch 初始状态 首先将本地更新一下和安装 sudo apt-get update sudo apt-get upgrade 然后更 ...
- c++ 集合的增删改查,与两集合的合并 缺陷(空间大小不灵活)
#if 1 #include <iostream> #include <stdlib.h> using namespace std; class List { public: ...
- anaconda3下64位python和32位python共存
查看当前工作平台:conda info 切换64位和32位: set CONDA_FORCE_32BIT=1是切换到32位 set CONDA_FORCE_32BIT= 是切换到64位 注意=号前后不 ...
- Vue Baidu Map局部注册实现和地图绘点
需求:在vue项目中,实现用户选择地图绘点或者通过搜索关键字选点 <template> <div id="home"> <h2>首页地图< ...