以永远较低的优先级控制线程

时间:2011-08-04 05:29:18

标签: multithreading operating-system

这是一个普遍的问题。 考虑一种情况,其中我们有一些具有不同优先级的线程。 现在在这种情况下,优先级最低的线程将永远无法控制资源,因为共享将始终以最高优先级进入线程。 无论如何我们可以绕过具有更高优先级的线程并为优先级较低的线程提供资源吗?

4 个答案:

答案 0 :(得分:0)

的内置机制是线程的优先级。通过在线程上设置低优先级,您告诉操作系统其活动“不太重要”,因此如果需要运行更重要的线程(具有更高优先级),那么这些线程优先。

如果您不希望线程可能没有CPU时间,那么它不应该是低优先级线程。

答案 1 :(得分:0)

这不一定是这种情况 - 它取决于优先实施。您描述它的方式假定高优先级线程将一直运行,直到它们完成并从执行时间中删除低优先级线程。

这可能是实现它的一种方式,但我认为更公平的策略是改为进行时间片共享。因此优先级决定每个线程获得多少CPU时间,而不一定是它们执行的顺序。

这是调度程序的责任 - Wikipedia:Scheduling

答案 2 :(得分:0)

如果您考虑如何在操作系统中实现这一点,您会发现优先级较低的线程确实运行差异的是它们的执行总时间较少。即使系统缺乏资源,低优先级线程也将始终执行。您可能唯一看到的是,只要优先级较高的线程可以运行,它就不会运行。如果您想了解更多,我建议您查找操作系统可用于安排进程和线程的不同方法。

如果您正在考虑使用编程语言执行此操作,则只需更改线程优先级,以便每次运行时都可以获得更多进度。通常,您具有低优先级线程来执行不是非常关键时间的后台事件,或者您不希望线程占用更多时间作为更重要的线程。

答案 3 :(得分:0)

显然有。等候。如果优先级较高的线程正在等待某些东西(可能是任何东西 - 锁定,来自文件,用户或网络的数据,计时器......)它不可运行,那么下一个更高优先级的线程就会运行。

非实时优先级通常也是可变数字。计划进程的优先级降低,同时对所有进程缓慢增加(由另一个可调因子计算)。这样,如果你有几个线程不等待任何东西,每次调度程序将选择一个不在CPU上的时间最长的那个。同样,当资源可用时,将立即安排正在等待的线程,因为它在等待时收集了高优先级(这使得用户界面响应后台进程,否则使用所有CPU)。