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