Windows线程调度、优先级、关联性

线程调度
  • 上下文切换(Context Switch):Windows在可调度的线程内核对象中选择一个,并将上次保存在线程上下文中的值载入CPU寄存器
  • ResumeThread SuspendThread可用于挂起与恢复线程。挂起线程是很危险的,比如这个线程正在访问堆,此时将这个线程挂起,那么会导致堆一直被锁定
  • 创建线程的时候,传入CREATE_SUSPENDED也可以挂起线程。线程一共能被挂起MAXIMUM_SUSPEND_COUNT(127,定义于WinNT.h中)次
  • Sleep:将自身挂起指定的时间,参考:https://docs.microsoft.com/en-us/windows/desktop/api/synchapi/nf-synchapi-sleep
  • SwitchToThread:Causes the calling thread to yield execution to another thread that is ready to run on the current processor. 参考:https://docs.microsoft.com/en-us/windows/desktop/api/processthreadsapi/nf-processthreadsapi-switchtothread
  • GetThreadTimes:用于查询线程创建时间、退出时间、内核时间、用户时间。类似的有GetProcessTimes
  • 高精度计时函数:QueryPerformanceCounter QueryPerformanceFrequency
线程优先级
  • 饥饿:较高优先级的线程占用了CPU时间,致使较低优先级的线程无法运行
  • 较高优先级的线程总是会抢占较低优先级的线程,无论较低优先级的线程是否正在执行
  • SetPriorityClass GetPriorityClass 设置、获取进程的优先级
  • SetThreadPriority GetThreadPriority 设置、获取线程的相对优先级
  • 基本优先级:由线程的相对优先级加上线程所属进程的优先级确定
  • 当系统检测到有线程处于饥饿状态3到4秒时,系统会提升饥饿线程的优先级,并允许其运行两个时间片,然后将其优先级恢复到原始状态
  • SetProcessPriorityBoost SetThreadPriorityBoost 设置系统对线程优先级的动态提升,均有对应的Get*函数
关联性
  • 软关联:系统将使线程在上一次运行的处理器上运行
  • 让线程始终在同一处理器上运行有助于重用仍在处理器高速缓冲区中的数据
  • SetProcessAffinityMask 用于设置进程的CPU集合,具有对应的Get*函数
  • SetThreadAffinityMask 用于设置线程的CPU集合,具有对应的Get*函数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 7,890评论 0 3
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 12,178评论 0 10
  • 在推荐序三中讲述了一个公司,Netflix他们的前首席人才官制作的《自由与责任的文化》这份127页的PPT点击量超...
    湘江北去饮水思源阅读 6,240评论 1 0
  • 作者:白居易 朝代:中唐 其一 江南好,风景旧曾谙⑵;日出江花红胜火⑶,春来江水绿如蓝⑷。能不忆江南? 其二 江...
    唯一念想阅读 4,266评论 1 0
  • 1人类dna一共二十三对染色体,前四十六条是遗传信息,最后一对染色体是性染色体,男的是X/Y,女人是X/X,X比Y...
    无尽沉淀阅读 3,544评论 0 0

友情链接更多精彩内容