为什么Linux允许线程设置调度策略和优先级?

时间:2017-09-04 12:13:00

标签: linux multithreading linux-kernel scheduled-tasks

我曾经认为线程调度策略和优先级由Linux内核决定,当我们编写在Linux上运行的应用程序时,我们无法通过代码更改它们,直到我看到系统调用如 sched_setscheduler < / strong>即可。我想知道为什么Linux会为应用程序提供这种接口,如果开发人员希望他的应用程序具有更好的用户体验,以便他在他的应用程序中运行线程,那么他可以通过像 sched_setscheduler ,这将使其他应用程序在相同的操作系统上运行。

1 个答案:

答案 0 :(得分:3)

反过来考虑一下:如果操作系统没有为您提供方法,您将如何 设置调度策略和优先级?用户/管理员执行这些操作的任何工具都需要这样的API。

当然,对于许多操作,您需要特权,例如设置实时调度策略和更高优先级。与往常一样,root(uid 0)可以做任何事情,但通过功能进行更细粒度的控制(允许CAP_SYS_NICE执行任何操作的进程)和资源限制,允许访问达到给定的优先级。有关详细信息,请阅读sched(7),“权限和资源限制”部分。

如果您尝试更改任何您没有权限的内容,sched_setscheduler()只会将-1结束集errno返回EPERM