Linux 线程优先级
一、调度策略
Linux线程调度策略有:SCHED_FIFO, SCHED_RR 和 SCHED_OTHER
- SCHED_FIFO: 先进先出算法(FIFO),按照进程进入就绪队列的先后次序来选择。即每当进入进程调度,总是把就绪队列的队首进程投入运行;
- SCHED_RR: 时间片轮转算法(RR),分时系统的一种调度算法,轮转的基本思想是,将CPU的处理时间划分成一个个的时间片,就绪队列中的进程轮流运行一个时间片。当时间片结束时,就强迫进程让出CPU,该进程进入就绪队列,等待下一次调度,同时,进程调度又去选择就绪队列中的一个进程,分配给它一个时间片,以投入运行。
- SCHED_OTHER: 不能设置优先级。
FIFO与RR的不同:
- 当采用RR策略的进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平。
- FIFO一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃。
- 如果有相同优先级的实时进程(根据优先级计算的调度权值是一样的)已经准备好,FIFO时必须等待该进程主动放弃后才可以运行这个优先级相同的任务。而RR可以让每个任务都执行一段时间。
二、如何查看一个线程的优先级
通过top 命令可以快速查看一个进程的有优先级,PR为对应进程的优先级,如下:
2. 也可以在/proc目录下查看对应线程的优先级
其中policy 为调度策略
0: SCHED_OTHER
1:SCHED_FIFO
2:SCHED_RR
prio 为优先级,优先级越大,值越小
三、如何设置线程的优先级
参考: https://blog.csdn.net/m0_37329910/article/details/100765833