1

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

使用这些 API 有什么陷阱吗?

4

2 回答 2

2

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

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

既然我们已经解决了技术问题,我发现直接操作线程的优先级几乎没有用处。操作系统调度程序足够复杂,可以提高在 I/O 中阻塞的线程的优先级,而不是执行 CPU 计算的线程(当 I/O 中断到达时,I/O 线程将抢占 CPU 线程)。事实上,甚至 I/O 线程也有所不同,例如,键盘 I/O 线程的优先级高于文件 I/O 线程。

于 2012-04-23T16:05:21.883 回答
1

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

Windows 优先级

陷阱?出色地:

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

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

于 2012-04-23T16:04:57.717 回答