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

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. 这很有帮助。

以上是关于应用于线程的延迟优先级更改的主要内容,如果未能解决你的问题,请参考以下文章

追踪内核中神秘的高优先级线程挂起

我可以在线程执行时更改线程的优先级。更改是发生还是os忽略它?(Java)

如何更改 Linux 中特定线程(LWT)的优先级?

USB 磁盘写入延迟(Windows)

在优先级反转问题上,我们应该更改互斥锁或线程的属性吗?

我可以为普通优先级进程设置单个线程的优先级高于 15 吗?