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时间,系统只是从所有可调度的线程中按调度算法挑选一个线程执行,被调度的线程不一定会是记事本线程。
相关文档:
Delphi 与 C/C++ 数据类型对照表
Delphi数据类型C/C++
ShorInt
8位有符号整数
char
Byte
8位无符号整数
BYTE,unsigned short
SmallInt
16位有符号整数
short
Word
16位无符号整数
unsigned short
Integer,LongInt
32位有符号整数
int,long
Cardinal,LongWord/DWORD
32位无符号整数
unsigned long
Int6 ......
B/S结构,即Browser/Server(浏览器/服务器
)结构,是随着
Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是
主要事务逻辑在服务器
端实现,形成所谓
3-tier结构。B/S结构,主要是利用了不断成熟的WWW浏览器技术,结合浏览器的 ......
由于Boost Python跟不上Python版本更新,如下方法调用可能产生TypeError: 'NoneType' object does not support item assignment异常。
Boost Python文档中例子可能产生异常。
Py_Initialize();
object main_module = import("__main__");
object main_dict = main_module.attr("__dict__");
try{
object ......
排序算法是一种基本并且常用的算法。由于实际工作中处理的数量巨大,所以排序算法对算法本身的速度要求很高。
而一般我们所谓的算法的性能主要是指算法的复杂度,一般用O方法来表示。在后面我将给出详细的说明。
对于排序的算法我想先做一点简单的介绍,也是给这篇文章理一个提纲 ......