例如,我运行多个具有不同优先级的无限线程。当发生线程切换时,低优先级的线程会被选择吗?优先级是绝对的还是只影响线程选择概率。
最佳答案
大多数调度程序都基于 multilevel feedback queues 。这些优先级主要基于程序的行为。内核将您分配的线程优先级更多地视为“提示”。
例如,如果一个线程执行大量 IO,那么由于 MFQ 的运行方式,即使它的优先级低于另一个线程,也可以更频繁地调度它。花费较多调度量的线程将被移至 MFQ 中较低的优先级。放弃部分量子量(即 IO)的线程可能会保持当前优先级。
如果您为线程 1 分配比线程 2 更高的优先级,并且它们正在处理类似的任务,则线程 1 获得调度的可能性更高。这并不意味着线程 1 必须比线程 2 更频繁地调度,它只是向内核暗示您希望它比线程 2 更频繁地调度。最后它启动了到内核哪个线程何时被调度。
关于Java - 线程优先级是绝对的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30105856/