我曾经认为线程调度策略和优先级由linux内核确定,当我们在Linux上编写应用程序时,我们无法通过代码更改它们,直到我看到系统调用像 sched_setscheduler 。我想知道为什么Linux会为应用程序提供此类界面,如果开发人员希望他的应用程序具有更好的用户体验,以使他在应用程序中运行的线程具有更高的计划优先级,那么他可以通过<strong等接口尽可能多地使用。> sched_setscheduler 将使其他应用程序在同一操作系统上运行。
以相反的方式考虑一下:如果OS 未提供,您将如何 ever 设置调度策略和优先级意味着这样做?用户/管理员做这些事情的任何工具都需要API。
当然,对于许多操作,您需要特权,例如设置实时调度策略和更高的优先级。与往常一样, root
(uid 0)可以做任何事情,但是通过(允许 CAP_SYS_NICE
可以做任何事情)和资源限制允许访问给定优先级。有关详细信息,请阅读sched(7)
," 特权和资源限制"部分。
如果您尝试更改任何您没有特权的任何内容,sched_setscheduler()
只会返回-1
END将errno
设置为EPERM
。