Linux 学习笔记(十六):进程的调度与优先级——谁先抢到 CPU?

一、 进程优先级:PRI 与 NI

在 Linux 中,CPU 资源是宝贵的,进程之间具有竞争性。为了决定谁先执行,引入了优先级(PRI)。

  • PRI (Priority):进程被 CPU 执行的优先级,值越小,越早执行。

  • NI (Nice) :进程优先级的修正数值。取值范围是 -20 到 19。

    关系公式:PRI(new) = PRI(old) + NI 。

    Nice 值就像它的名字一样,值越大,越"友善",越容易把 CPU 让给别人;值越小(负数),越"霸道"。默认 NI 为 0。

二、 并行 (Parallel) 与 并发 (Concurrent)

  • 并发 :多个进程在一个 CPU 下交替运行。宏观上是同时,微观上是排队切换。

  • 并行 :多个进程在多个 CPU (核心)下同时独立运行。

    (可以想象成:一家咖啡店只有一台机器(并发),有两台机器(并行))。

三、 上下文切换 (Context Switch)

当 CPU 从一个进程切到另一个进程时,操作系统必须保存当前进程的寄存器状态(比如程序计数器),并存入它的 PCB(task_struct)中。下次再切回来时,再恢复这些数据。这一过程叫上下文切换。由于切换需要花费时间,所以频繁切换会降低系统性能。

四、 实战:查看与修改优先级

bash 复制代码
# 1. 启动一个后台测试进程
ping www.baidu.com > /dev/null &

# 2. 使用 ps -l 查看其 PRI 和 NI
ps -l

# 3. 使用 renice 调大 NI 值(降低优先级)
sudo renice 10 -p <PID>

# 4. 直接在启动时指定 nice 值 (需要 root 权限,这里设为 -5)
sudo nice -n -5 top

总结

进程调度是操作系统的核心功能之一。理解 NI 值的作用,不仅能帮我们在运维时优化系统性能(把不重要的后台任务 NI 调大),也是面试中经常考察的基本功。

自我实战操作

实战 1:查看优先级
bash 复制代码
# 1. 随便运行一个死循环程序,比如 top 或者一直 ping
ping www.baidu.com > /dev/null &

# 2. 找到它的 PID 和 PRI/NI
ps -l
# 观察输出:PID、PRI(通常是 80 或 60)、NI(通常是 0)
实战 2:修改优先级
bash 复制代码
# 1. 用 renice 命令给 PID 为 xxxx 的进程增加 10 的 nice 值
# (xxxx 换成你刚才 ping 的 PID)
sudo renice 10 -p xxxx

# 2. 再次查看,你会发现 NI 变成 10,PRI 变大了
ps -l
实战 3:直接启动一个高优先级进程(需要 root)
bash 复制代码
# 启动一个 top 进程,并且直接给它 nice 值 -5 (变霸道)
sudo nice -n -5 top
相关推荐
幽灵诶40 分钟前
学习Linux
linux·学习
衫水43 分钟前
Windows 端 OpenSSL 安装与自签证书生成笔记
windows·笔记
kyle~1 小时前
Linux --- CPU 调度机制
linux·运维·数码相机
晴天的雨.9921 小时前
【Linux】编译器gcc/g++
linux·运维·服务器
pirateeee1 小时前
Yocto 构建基于官方 imx6ull-14x14-evk 的 ubuntu 镜像
linux·嵌入式硬件
梦想的初衷~1 小时前
CESM2 完整实操学习大纲:环境搭建、案例运行、耦合模拟与代码开发
linux·地球系统模式·cesm2·气候模式模拟·clm 陆面模型·cam 大气模式·模式移植编译
叼烟扛炮1 小时前
Linux 学习笔记(三):文件管理与文本查看
linux·笔记·学习
海绵宝宝转agent1 小时前
2026-10-21学习笔记
笔记·学习·算法
动词ing1 小时前
【学习笔记】51单片机 点亮一个LED灯
笔记·学习·51单片机