应用于线程的延迟优先级更改
Posted
技术标签:
【中文标题】应用于线程的延迟优先级更改【英文标题】:Latency priority changes being applied to a thread 【发布时间】:2014-03-25 22:31:36 【问题描述】:我想编写一个程序,其中几个工作线程应该处理具有不同优先级的不同任务。大任务将以低优先级处理,小任务以非常高的优先级处理。
在一个完美的世界中,我会简单地为每种任务设置不同的优先级,但由于它比 Windows 上可用的优先级级别更多的任务类型,我认为我必须动态设置线程优先级。
我认为应该有一个具有最高优先级的主线程,作为一种调度程序来动态设置工作线程的优先级。但我想知道当我调用 SetThreadPriority() 时在 Windows 上实际发生了什么,尤其是操作系统考虑到优先级更改的速度有多快。
理想情况下,我需要在
【问题讨论】:
显然我对多线程和调度不是很了解。我知道基本概念(循环、基本优先级、优先级等),但我很想更深入地了解“什么时候发生”以及调度程序和优先级更改的时间。我很高兴任何提示! 【参考方案1】:windows 调度程序(调度程序)不是单个进程/线程;它分布在内核中。调度器一般由以下事件触发:
-
线程准备好执行
线程离开运行状态(例如,时间片过期、等待状态或完成)
线程的优先级发生变化(例如
SetThreadPriority
)
处理器关联性更改
我需要在
根据3:是,调度员会立即重新安排。
参考:Windows Internals Tour: Windows Processes, Threads and Memory,Microsoft Academic Club 2011
【讨论】:
非常感谢!我做了一些测试,特别是确认了 3. 这很有帮助。以上是关于应用于线程的延迟优先级更改的主要内容,如果未能解决你的问题,请参考以下文章