【问题标题】:Why would Linux allow thread to set scheduling policy and priority?为什么 Linux 会允许线程设置调度策略和优先级?
【发布时间】:2018-02-12 16:15:13
【问题描述】:
我以前认为线程调度策略和优先级是由Linux内核决定的,我们在编写运行在Linux上的应用程序时不能通过代码改变它们,直到我看到像sched_setscheduler这样的系统调用>。我想知道为什么Linux会为应用程序提供这种接口,如果开发人员希望他的应用程序具有更好的用户体验,以便他通过sched_setscheduler 这将使在同一操作系统上运行的其他应用程序饿死。
【问题讨论】:
标签:
linux
multithreading
linux-kernel
scheduled-tasks
【解决方案1】:
换个角度想一想:如果操作系统没有为您提供方法,您将如何设置调度策略和优先级?用户/管理员做这些事情的任何工具都需要这样的 API。
当然,您需要 特权 来执行许多操作,例如设置 实时 调度策略和更高的优先级。与往常一样,root (uid 0) 可以做任何事情,但是通过 capabilities 可以进行更细粒度的控制(允许具有 CAP_SYS_NICE 的进程做任何事情)和 允许访问给定优先级的资源限制。有关详细信息,请阅读sched(7),“权限和资源限制”部分。
如果您尝试更改您无权更改的任何内容,sched_setscheduler() 只会将-1 结束集errno 返回到EPERM。