实战操作:进程优先级与调度策略
进程优先级与调度策略
基础知识
1、Linux内核当中有三种调度策略:
- SCHED_OTHER 分时调度策略
- SCHED_FIFO 实时调度策略,先到先服务
- SCHED_RR 实时调度策略,时间片轮转
备注:如果有相同优先级的实时进程(根据优先级计算的调度权值是一样的)已经准备好,FIFO时必须等待该进程主动放弃之后才可以运行这个优先级相同的任务。而RR可以每个任务都执行一段时间。
2、获取线程设置的最高和最低优先级函数如下
获取实时优先级的最大值int sched_get_priority_max(int policy);
获取实时优先级的最小值int sched_get_priority_min(int policy);
SCHED_OTHER它不支持优先级使用,而SCHED_RR/SCHED_FIFO支持优先级使用,它们具体为1-99,数值越大优先级越高。
实时调度策略(SCHED_FIFO/SCHED_RR) 优先级最大值为99,最小值为1;有SCHED_FIFO先到先服务和实时调度策略,时间片轮转。
普通调度策略(SCHED_NORMAL/SCHED_BATCH/SCHED_IDLE),始终返回0,即普通任务调度的函数。
3、设置和获取优先级2个主要核心函数
创建线程优先级int pthread_attr_setschedparamg(pthread_attr_t *attr, const struct sched_param *param);
获取线程优先级int pthread_attr_getschedparamg(pthread_attr_t *attr, const struct sched_param *param);
struct sched_param
{
int __sched_priority; // 所有设定的线程优先级
}
param.sched_priority=11 // 设置优先级
当操作系统创建线程时,默认线程是SCHED_OTHER,我们也可以通过改变调度策略,使用如下函数:
设置线程调度策略。int pthread_attr_setschedpolicy(pthread_attr_t *attr , int policy)
基础案例分析
1,操作系统所支持优先级测试程序分析
版权声明:
作者:徐锦桐
链接:https://www.xujintong.com/2023/10/30/34/
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
作者:徐锦桐
链接:https://www.xujintong.com/2023/10/30/34/
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
THE END