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

为什么Linux允许线程设置调度策略和优先级?,linux,multithreading,linux-kernel,scheduled-tasks,Linux,Multithreading,Linux Kernel,Scheduled Tasks,我曾经认为线程调度策略和优先级是由Linux内核决定的,在编写运行在Linux上的应用程序时,我们不能通过代码来更改它们,直到我看到系统调用,如sched_setscheduler。我想知道为什么Linux会为应用程序提供这种接口,如果开发人员希望自己的应用程序具有更好的用户体验,从而使应用程序中运行的线程具有尽可能高的调度优先级,那么通过类似于sched_setscheduler的接口,会使在同一操作系统上运行的其他应用程序陷入饥饿状态,该怎么办如果操作系统没有为您提供方法,您将如何设置调度策

我曾经认为线程调度策略和优先级是由Linux内核决定的,在编写运行在Linux上的应用程序时,我们不能通过代码来更改它们,直到我看到系统调用,如sched_setscheduler。我想知道为什么Linux会为应用程序提供这种接口,如果开发人员希望自己的应用程序具有更好的用户体验,从而使应用程序中运行的线程具有尽可能高的调度优先级,那么通过类似于sched_setscheduler的接口,会使在同一操作系统上运行的其他应用程序陷入饥饿状态,该怎么办如果操作系统没有为您提供方法,您将如何设置调度策略和优先级?用户/管理员执行这些操作的任何工具都需要这样的API

当然,许多操作都需要特权,比如设置实时调度策略和更高的优先级。像往常一样,
root
(uid 0)可以做任何事情,但是通过功能(一个具有
CAP\u SYS\u NICE
的进程可以做任何事情)和允许访问到给定优先级的资源限制,有一个更细粒度的控制。有关详细信息,请阅读“特权和资源限制”一节


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

从另一个角度考虑:如果操作系统没有提供执行计划的方法,您将如何设置计划策略和优先级?用户/管理员执行这些操作的任何工具都需要这样的API

当然,许多操作都需要特权,比如设置实时调度策略和更高的优先级。像往常一样,
root
(uid 0)可以做任何事情,但是通过功能(一个具有
CAP\u SYS\u NICE
的进程可以做任何事情)和允许访问到给定优先级的资源限制,有一个更细粒度的控制。有关详细信息,请阅读“特权和资源限制”一节

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