Linux kernel 使用多个调度策略

Linux kernel 使用多个调度策略,linux-kernel,posix,scheduling,Linux Kernel,Posix,Scheduling,我们是否可以对两个线程使用SCHED_OTHER和SCHED_RR,如果是这样,CPU将如何使用非实时和实时策略处理线程。实时线程(即SCHED_RR)将始终抢占非实时线程(即SCHED_OTHER) 换句话说,SCHED_-other线程只有在SCHED_-RR线程被阻塞时才有机会运行。实时线程(即使用SCHED_-RR)将始终抢占非实时线程(即使用SCHED_-other) 换句话说,SCHED_other线程只有在SCHED_RR线程被阻塞时才有机会运行。对于POSIX的Linux实现,@

我们是否可以对两个线程使用
SCHED_OTHER
SCHED_RR
,如果是这样,CPU将如何使用非实时和实时策略处理线程。

实时线程(即
SCHED_RR
)将始终抢占非实时线程(即
SCHED_OTHER

换句话说,
SCHED_-other
线程只有在SCHED_-RR线程被阻塞时才有机会运行。

实时线程(即使用
SCHED_-RR
)将始终抢占非实时线程(即使用
SCHED_-other


换句话说,
SCHED_other
线程只有在SCHED_RR线程被阻塞时才有机会运行。

对于POSIX的Linux实现,@janneb所说的是正确的。但由于这个问题也被标记为posix,我将引用posix 7:

在系统中,其他线程在SCHED_FIFO、SCHED_RR或SCHED_下执行时,使用SCHED_OTHER策略调度线程的效果由实现定义


因此,我可以从中理解,POSIX没有指定发生了什么。

对于POSIX的Linux实现,@janneb所说的是正确的。但由于这个问题也被标记为posix,我将引用posix 7:

在系统中,其他线程在SCHED_FIFO、SCHED_RR或SCHED_下执行时,使用SCHED_OTHER策略调度线程的效果由实现定义


因此,我可以从中解释,POSIX没有指定发生了什么。

如果假设具有实时策略的线程持续更长时间,那么具有SCHED_OTHER策略的线程会发生什么情况?@Gughan:SCHED_OTHER线程将等待实时线程放弃CPU。如果实时线程从未放弃CPU,SCHED_其他线程将永远没有机会运行。如果假设具有实时策略的线程持续更长时间,那么具有SCHED_其他策略的线程会发生什么情况?@Gughan:SCHED_其他线程将等待实时线程放弃CPU。如果实时线程从未放弃CPU,那么SCHED_其他线程就永远没有机会运行。