Linux进程的调度策略分为以下几种:
#define SCHED_OTHER 0
#define SCHED_FIFO 1
#define SCHED_RR 2
#define SCHED_BATCH 3
#define SCHED_IDLE 5
可以把它们分为两大类:
实时进程
- SCHED_FIFO和SCHED_RR
非实时进程
- SCHED_OTHER、SCHED_BATCH和SCHED_IDLE
SCHED_OTHER:又叫交互式进程,主要处理I/O任务,例如鼠标键盘操作
SCHED_BATCH和SCHED_IDLE:又叫批处理进程,主要处理优先级不高的任务,例如文本编辑程序和图形应用批处理程序
SCHED_FIFO和SCHED_RR:主要处理对实时性要求很高的的任务,例如程序语言的编译程序, 数据库搜索引擎以及科学计算实时进程
- 进程创建时,默认是SCHED_ OTHER
- 常用的是前三种
- 对于实时进程linux采用FIFO或者Round Robin调度策略,由实时优先级(0-99 99最高)决定调度权值
- Linux分不清SCHED_OTHER、SCHED_BATCH和SCHED_IDLE,把它们统一归类为非实时进程,传统的linux调度器会提高交互式进程-的优先级,最新的CFS和RSDL等新的调度器则是完全公平的策略。
- FIFO进程运行前,实时优先级更高的先执行,FIFO进程开始执行后除非有优先级更高的实时进程就绪、或者当前FIFO进程主动休眠、或- 者FIFO进程执行完毕,否则该进程将会一直占用cpu
- RR进程运行前,实时优先级最高的先执行,执行的时间片由RR进程的nice值(-20 – 19 -20最高 默认为0)决定,RR进程开始执行后时间片到0了则执行下一个RR进程。所有RR进程可以自行休眠或者被更高优先级的实时进程锁抢占。
- 所有的实时进程都可以随时抢占非实时进程。
相关函数:
pthread_attr_setschedpolicy()设置进程调度策略
pthread_attr_setschedparam()设置进程优先级