我刚遇到Get / SetThreadPriority方法,他们让我想知道 - 线程优先级有意义是否可以设置为高于拥有进程优先级(我不相信可以用同样的方式以编程方式改变)?
使用这些API有任何陷阱吗?
答案 0 :(得分:2)
是的,您可以将线程优先级设置为任何类,包括高于当前进程的类。实际上,这两个值是互补的,并提供线程的基本优先级。您可以在您发布的链接的备注部分阅读相关内容。
您可以使用SetPriorityClass设置流程优先级。
既然我们已经完成了技术细节,我发现直接操纵线程的优先级几乎没用。 OS调度程序非常复杂,可以通过执行CPU计算的线程提高I / O中阻塞的线程的优先级(当I / O中断到达时,I / O线程将抢占CPU线程)。实际上,即使I / O线程也是有区别的,例如,键盘I / O线程优先于文件I / O线程提升。
答案 1 :(得分:1)
在Windows上,线程和进程优先级使用algorthm组合,决定整体调度优先级:
缺陷?良好:
如果线程的优先级通常在IO上被阻止,则必须提高线程的优先级,但必须在其驱动程序发出信号后尽快运行,例如。必须快速处理缓冲区的视频IO。
如果线程的优先级受CPU限制并提升到高优先级,则提高线程的优先级可能会产生最大的负面影响,从而阻止正常优先级线程的运行。如果采取极端措施,操作系统线程和任务管理器等实用程序将无法运行。