内核对进程调度时发生了什么?
任务 / 进程 切换
当时间片耗完,不管进程正在执行什么代码,都一定会发生上下文切换!
上下文切换必然导致进程状态的转换
上下文切换由中断触发 (时钟中断,IO中断,等)
处理器上电后,开始一直不停的向下执行指令
当系统中没有进程时,会执行一个 "不执行任何操作的" 的空闲进程
空闲进程的职责:执行特殊指令使处理器进入休眠状态 (低功耗状态)
空闲状态是一种暂态,但凡出现就绪进程,空闲状态立即结束
ps -- 查看进程运行时数据 (ps au)
top -- Linux 整体性能监测工具 (类似任务管理器)
sar -- Linux 活动情况报告 (系统性能分析工具)
即:Linux 系统负载平均值 (Linux System Load Averages)
该值表示的是一段时间内任务对系统资源需求的平均值 (1、5 和 15 分钟)
runq-sz:执行队列的长度
plist-sz:运行中的任务 (进程 & 线程) 总数
ldavg-1:最近 1min 系统平均负载
ldavg-5:最近 5min 系统平均负载
ldavg-15:最近 15min 系统平均负载
通过 Linux 性能工具观察进程调度
吞吐量:单位时间内的工作总量?(越大越好)
延迟:从开始处理任务到结束处理任务所耗费的时间 (越短越好)
假设:每个进程固定执行 60ms
则:进程运行结束时
结论:
处理器的能力由硬件设计决定,吞吐量决定一个上限
当吞吐量未达上限,进程的延迟取决于进程自身
当吞吐量达到上限,随着进程数量增加,总延迟增加,但平均延迟不变
理想状态:进程正在执行,并且没有就绪状态的进程
空闲状态:处理器占用率低,吞吐量低
繁忙状态:
多个进程同时运行,但存在多个就绪状态的进程
此时,吞吐量很高(可能达到峰值),但总延迟会变长