延迟优先级更改应用于线程

时间:2014-03-25 22:31:36

标签: c++ windows multithreading thread-priority

我想编写一个程序,其中几个工作线程应该处理具有不同优先级的不同任务。大型任务将以低优先级处理,小型任务将以非常高的优先级处理。

在一个完美的世界中,我只是为每种任务设置不同的优先级,但由于它是比Windows上可用的优先级更多的任务类型,我认为我必须动态设置线程优先级。

我认为应该有一个具有最高优先级的主线程,作为一种调度程序,动态地设置工作线程的优先级。但我想知道在Windows上实际发生了什么,当我调用SetThreadPriority()时,特别是操作系统考虑优先级更改的速度有多快。

理想情况下,我需要提高<>内的'小任务线程'的优先级。 1毫秒这可能吗?有没有办法改变操作系统的延迟(如果有的话)对优先级变化作出反应?

1 个答案:

答案 0 :(得分:1)

Windows调度程序(调度程序)不是单个进程/线程;它遍布内核。调度员通常由以下事件触发:

  1. 线程已准备好执行
  2. 线程离开运行状态(例如量子到期,等待状态或完成)
  3. 主题的优先级发生变化(例如SetThreadPriority
  4. 处理器关联性更改
  5. 我需要提高<>内的'小任务线程'的优先级。 1毫秒这可能吗?

    根据3:,调度员将立即重新安排。

    参考:Windows Internals Tour: Windows Processes, Threads and Memory Microsoft Academic Club 2011