从正在运行的进程设置线程优先级

Setting thread priorities from the running process

本文关键字:设置 线程 优先级 进程 运行      更新时间:2023-10-16

我刚刚遇到了 Get/SetThreadPriority 方法,它们让我想知道 - 线程优先级是否可以有意义地设置为高于拥有进程优先级(我不相信可以以相同的方式以编程方式更改)?

使用这些 API 是否存在任何陷阱?

是的,您可以将线程优先级设置为任何类,包括高于当前进程的类。实际上,这两个值是互补的,并提供线程的基本优先级。您可以在您发布的链接的"备注"部分中阅读有关它的信息。

您可以使用 SetPriorityClass 设置进程优先级。

现在我们已经解决了技术细节,我发现直接操作线程的优先级几乎没有用处。操作系统调度程序足够复杂,可以提高 I/O 中阻塞的线程相对于执行 CPU 计算的线程的优先级(以至于当 I/O 中断到达时,I/O 线程将抢占 CPU 线程)。事实上,即使是 I/O 线程也是有区别的,例如,键盘 I/O 线程比文件 I/O 线程获得优先级提升。

在Windows上,线程和进程优先级使用决定整体调度优先级的算法进行组合:

窗口优先级

陷阱? 井:

如果线程通常在 IO 上被阻塞,但必须在其驱动程序发出信号后尽快运行,则提高线程的优先级可能会带来最大的整体收益,例如。必须快速处理缓冲区的视频 IO。

如果线程受 CPU 限制并提升到高优先级,则提高线程的优先级可能会产生最大的整体负面影响,从而阻止正常优先级线程的运行。 如果极端,操作系统线程和实用程序(如任务管理器)将无法运行。