Linux 的任务调度机制是其多任务处理能力的核心,主要由内核调度器(Kernel Scheduler)管理进程/线程对 CPU 资源的分配。以下是其关键机制和特点:
Linux 采用 多调度器类(Scheduler Classes) 的层次结构,优先级从高到低依次为:
- 实时调度器(Real-Time Scheduler)
- SCHED_FIFO:先进先出,高优先级进程独占 CPU 直到退出或主动让出。
- SCHED_RR:时间片轮转,同优先级进程轮流执行。
- 优先级范围:1
(最低)~ 99
(最高),通过 chrt
命令设置。
- 完全公平调度器(CFS, Completely Fair Scheduler)
- 默认调度普通进程(SCHED_NORMAL
),基于 虚拟运行时间(vruntime) 动态分配 CPU 时间。
- 目标:公平性(低延迟 + 高吞吐量),通过 nice
值(-20~19)调整权重。
need_resched
标志触发调度。task_struct
结构体管理调度信息(如优先级、vruntime)。sched_yield()
或阻塞(I/O、锁)。bash
chrt -p <PID> # 查看实时优先级
ps -eo pid,class,rtprio,ni,cmd | grep -v "FF\|RR" # 过滤非实时进程
bash
nice -n 10 ./program # 启动普通进程(nice值=10)
chrt -f 99 ./program # 启动 FIFO 实时进程(优先级99)
bash
vmstat 1 # 查看 cs(context switch)次数
pidstat -w -p <PID> 1 # 监控特定进程的切换
/proc/sys/kernel/
):
bash
sysctl kernel.sched_min_granularity_ns=1000000 # 最小时间片(默认 1ms)
bash
taskset -c 0,1 ./program # 绑定到 CPU 0 和 1
Linux 调度机制通过分层调度器(实时 + CFS)、动态优先级和负载均衡实现高效的多任务处理。理解其原理有助于优化性能(如调整 nice
值、绑定 CPU)或开发低延迟应用(如使用实时调度类)。