易截截图软件、单文件、免安装、纯绿色、仅160KB

Windows via C/C++:线程调度——概述

基于优先级的操作系统(preemptive operating system)必须使用某种算法以决定CPU如何调度系统中的线程,本章将讨论Windows Vista使用的调度算法。 我们之前讨论过线程的上下文结构CONTEXT,其中含有线程最后一次执行时CPU寄存器组的状态。 操作系统每20毫秒检查系统中所有线程内核对象的状态,其中一些对象被认为是可调度(scheduable)的,操作系统会从可调度的对象中选择一个,并将其CONTEXT中的值加载到CPU寄存器组中,这个实现线程调度的过程被称为上下文切换(Context Switch)。
接下来,被选择的线程将在其进程地址空间中执行代码、操作数据。大概20ms之后,Windows会重新将CPU寄存器组的状态写回到该线程的CONTEXT结构中,并从其它可调度的线程内核对象中选择一个要调度的对象,将其CONTEXT结构内容加载到CPU寄存器中,这样原线程将不再运行,新线程开始运行。上下文切换会从系统启动开始持续到系统关闭。
系统只会调度可调度的线程,但事实上系统中的大多数线程都是不可高度的。比如,有些线程的暂停计数(suspend count)大于0,这意味着线程被挂起且不应该为其分配任何CPU时间,为了挂起一个线程,可以在创建线程时为CreateThread指定CREATE_SUSPEND标志,本章后面会讨论挂起已存在线程的方法(SuspendThread和ResumeThread函数)。
除了挂起的线程,其它线程可能会因为在等待某些资源而变得不可调度。比如,你打开了记事本之后什么也不做,记事本线程将处于等待状态,系统不会为直分配时间片,除非你移动其窗口或向其编辑区中键入文本,此时记事本线程变成可调度的,但这并不意味着它会立即获得CPU时间,系统只是从所有可调度的线程中按调度算法挑选一个线程执行,被调度的线程不一定会是记事本线程。


相关文档:

Python嵌入C++详解(1)

来CSDN的时候,刚刚接触Python,那时候对Python的嵌入部分很感兴趣,只是一直没有时间来弄清其面纱,因此也一直没有使用嵌入的功能,另一个原因是我还没有真正用Python写过一个正式的有用点的东西,不过,现在回过头来继续看这一部分,发现还是挺简单的。以前想把这部分翻译出来,可是由于时间原因,也没有那精力,所以这里 ......

c/c++文件读写操作总结

在编程的过程中,文件的操作是一个经常用到的问题,在C++Builder中,可以使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是:
 
1、基于C的文件操作;
2、基于C++的文件操作;
3、基于WINAPI的文件操作;
4、基于BCB库的文件操作;
5、特殊文件的操作。
 
壹、基于C的文件操作
  在A ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号