每个线程都有一个上下文(CONTEXT),后者保存在线程的内核对象中。这个上下文反映了线程上一次执行时CPU寄存器的状态。大约每隔20ms,Windows都会查看所有当前存在的线程内核对象,Windows在可调度的线程内核对象中选择一个,并将上次保存在线程上下文中的值载入CPU寄存器。
线程执行代码,并在进程的地址空间中操作数据。又过了20ms,Windows将CPU寄存器存回线程的上下文,线程不在运行。系统再次检查剩下的可调度线程内核对象,选择另一个线程的内核对象,将该线程的上下文载入CPU寄存器,然后继续。载入线程上下文,让线程运行,保存上下文并重复的操作在系统启动的时候就开始,然后这样的操作不断重复,直至系统关闭。
超线程:超线程处理器芯片有多个逻辑CPU,每个都可以运行一个线程。每个线程都有自己的体系结构状态,但是所有线程共享主要的执行资源,比如CPU高速缓存。当一个线程中止时,CPU自动执行另一个线程,无需操作系统干预。
线程优先级:
每个线程都被赋予0(最低)~31(最高)的优先级数。首先查看优先级为31的线程,并以循环的方式进行调度。当较高优先级的线程占用了CPU时间,致使较低优先级的线程无法运行时,称为饥饿。
进程优先级分类:
real-time(实时)
high(高)
above normal(高于标准)
normal(标准)
below normal(低于标准)
idle(低)
相对线程优先级类别:
time-ciritcal
highest
above normal
normal
blew normal
lowest
idle
进程属于某个优先级类,可以指定进程中线程的相对优先级。 进程永远无法调度,能调度的只能是线程。