【Linux】Linux进程概念(进程优先级,进程切换详解)

本文是小编巩固自身而作,如有错误,欢迎指出!

目录

一、基本概念

二、查看系统进程

三、PRI与NI

[1. NI < 0(负数,提升优先级)](#1. NI < 0(负数,提升优先级))

[2. NI = 0(默认值)](#2. NI = 0(默认值))

[3. NI > 0(正数,降低优先级)](#3. NI > 0(正数,降低优先级))

四、概念补充------独立,竞争,并行,并发

独立(Independent)

并发(Concurrent)

并行(Parallel)

竞争(Competition)

五、进程切换

进程切换的概念

进程切换的三个关键阶段

进程切换的触发场景

[1. 时间片用完(主动 / 被动)](#1. 时间片用完(主动 / 被动))

[2. 进程主动阻塞(主动)](#2. 进程主动阻塞(主动))

[3. 高优先级进程抢占(被动)](#3. 高优先级进程抢占(被动))

总结


一、基本概念

进程优先级是操作系统调度器分配 CPU 资源的核心依据,数值越小优先级越高,决定进程获得 CPU 时间的先后与多少。

cpu资源分配的先后顺序,就是指进程的优先权(priority)。

优先权⾼的进程有优先执⾏权利。配置进程优先权对多任务环境的linux很有⽤,可以改善系统性 能

还可以把进程运⾏到指定的CPU上,这样⼀来,把不重要的进程安排到某个CPU,可以⼤ 改善 系统整体性能。

二、查看系统进程

在linux或者unix系统中,⽤ps ‒l命令则会类似输出以下⼏个内容:

我们很容易注意到其中的⼏个重要信息,如下:

  1. UID
  • 全称:User ID
  • 意思:谁启动、谁拥有这个进程
  • 作用:决定进程能访问哪些文件、权限多大。
  1. PID
  • 全称:Process ID
  • 意思:进程的唯一身份证号
  • 作用:系统靠 PID 区分、管理、杀死进程。
  1. PPID
  • 全称:Parent PID
  • 意思:父进程 ID
  • 作用:表示这个进程是被谁创建出来的
  • 例:你在终端开程序,终端就是父进程,PPID 就是终端的 PID。
  1. PRI
  • 全称:Priority
  • 意思:内核真正用的优先级
  • 规则:值越小,优先级越高,越先被 CPU 执行
  • 普通进程默认 PRI 一般是 80 左右。
  1. NI
  • 全称:Nice 值
  • 意思:用户可以改的 "谦让值"
  • 范围:-20 ~ 19
    • -20:最不谦让,优先级最高
    • 19:最谦让,优先级最低
    • 默认:0

三、PRI与NI

在上网我们已经粗略了解了PRI与NI的含义,现在我们看看具体的使用。

PRI 本身无法直接修改,它是内核根据 NI(nice 值)动态计算的结果(PRI = 基准值 + NI),所以修改 NI 就是间接调整 PRI

这点修改前我们查看到我们这个test01进程的NI是0

可以看到,我们在执行renice指令后,NI的值就发生了变化

1. NI < 0(负数,提升优先级)
  • 影响:进程会 "插队" 获取 CPU 时间,系统会优先把 CPU 资源分配给它,响应速度更快、卡顿更少。
  • 适用场景
    • 实时性要求高的进程(比如视频直播推流、游戏、鼠标 / 键盘交互进程);
    • 核心业务进程(比如服务器的核心服务、数据库查询)。
  • 举例 :把 test01 的 NI 设为 - 5(renice -5 -p 9766),如果此时系统同时运行 "视频播放" 和 "文件备份",CPU 会优先处理 test01,test01 的执行速度会明显比备份进程快。
  • 风险:若给非核心进程设 NI=-20,可能会抢占系统关键进程(比如系统服务、终端)的 CPU,导致系统卡顿、响应变慢,甚至无响应(比如 NI=-20 的进程一直占用 CPU,鼠标都动不了)。
2. NI = 0(默认值)
  • 影响:进程和其他默认优先级进程 "公平竞争" CPU,系统按时间片轮询分配资源,无特殊优待 / 限制。
  • 适用场景:绝大多数普通进程(比如日常运行的脚本、编辑器、浏览器)。
  • 举例:你的 test01 默认 NI=0,此时它和桌面程序、终端进程平等占用 CPU,谁都不会优先。
3. NI > 0(正数,降低优先级)
  • 影响:进程会主动 "谦让" 其他进程,只有当高 / 默认优先级进程空闲时,它才会获得 CPU 时间,执行速度变慢,但不会影响其他进程的响应。
  • 适用场景
    • 后台非紧急任务(比如文件备份、日志分析、大文件压缩);
    • 耗 CPU 但不紧急的任务(比如数据批量处理、下载)。

NI(Nice 值)的大小直接决定进程对 CPU 资源的 "争抢能力",核心规律是:NI 越小,进程优先级越高,获得的 CPU 时间越多;NI 越大,进程越 "谦让",获得的 CPU 时间越少

四、概念补充------独立,竞争,并行,并发

独立(Independent)

进程之间互不干扰,各玩各的。

  • 每个进程有自己的 PID、内存、文件
  • A 崩溃、死掉,不影响 B
  • 操作系统把它们隔离开

例子:你开 QQ、开浏览器、开 test01→ 它们互不影响,这就是独立

并发(Concurrent)

CPU 只有 1 个核心,快速切换跑多个进程,看起来像同时跑。

  • 同一时间真正只跑一个
  • 操作系统飞快切换(毫秒级)
  • 人感觉不出来,以为同时运行

特点:宏观同时,微观交替。

并行(Parallel)

多个 CPU 核心,真的同时跑多个进程。

  • 2 核 → 可以同时跑 2 个进程
  • 4 核 → 同时跑 4 个
  • 真正的同时执行

特点:宏观同时,微观也同时。

竞争(Competition)

多个进程抢 CPU 资源,谁优先级高谁先跑。

这就和你刚学的 PRI、NI 直接相关:

  • 进程都想占用 CPU
  • PRI 越小、NI 越小,谁抢得越厉害
  • 谁先被 CPU 执行

NI 越小 → 越不谦让 → 竞争能力越强NI 越大 → 越谦让 → 竞争能力越弱

五、进程切换

进程切换的概念

进程切换(Context Switch) 就是:CPU 从一个进程的工作中停下来,立马去执行另一个进程。

进程切换的三个关键阶段

CPU 切换不是瞬间完成的,分三步:

  1. 保存现场(Save Context)
    • 把当前进程 A 的 CPU 寄存器程序计数器(PC) 等数据存到内存里。
    • 目的:下次切回来还能接着干,知道刚才算到哪了。
  2. 恢复现场(Restore Context)
    • 从内存里把进程 B 之前保存的数据,读回 CPU 寄存器。
    • 目的:让 B 回到它上次离开的状态。
  3. 执行新进程
    • CPU 开始执行进程 B 的代码。

进程切换的触发场景

1. 时间片用完(主动 / 被动)
  • 场景:进程 A 用满了分配给它的 CPU 时间(比如 10ms)。
  • 动作:定时器中断,强制把 CPU 拿走,切换到下一个进程。
  • 关联:这是普通进程(CFS)默认的切换方式。
2. 进程主动阻塞(主动)
  • 场景:进程 A 要读磁盘 / 网络,需要等待数据(I/O 等待)。
  • 动作:A 主动放弃 CPU,操作系统立马切到进程 B。
  • 结果:A 进入睡眠状态(S 状态),直到数据准备好。
3. 高优先级进程抢占(被动)
  • 场景 :系统正在运行低优先级进程 A,突然来了一个高优先级进程 B(比如 NI=-20 的实时进程)。
  • 动作
    • 不管 A 时间片用完没用完,CPU 立刻打断 A。
    • 保存 A 的现场,立刻切换给 B。
  • 关键点这就是 PRI/NI 的作用! 优先级高的会抢占低优先级的 CP

总结

  1. 本质 :CPU 在不同进程间的寄存器 / 内存数据来回搬运。
  2. 原因:要么是时间到了,要么是在等 IO,要么是有更高优先级的任务来了。
  3. 你的操作:你修改 NI 值,就是在告诉操作系统:"这个任务更重要 / 更不重要,请多给 / 少给它切换机会。"

本次分享就到这里结束了,后续会继续更新,感谢阅读!

相关推荐
老师好,我是刘同学2 小时前
30个核心Linux命令速查手册
linux
fsj2009yx2 小时前
如何把无公网的求生之路2服务器借助VPS转发注册到steam master列表中
linux·wireguard·求生之路2
慵懒的猫mi2 小时前
deepin UOS AI 助手接入飞书(Feishu)配置指南
linux·人工智能·ai·gpt-3·飞书·文心一言·deepin
sheepfagdng2 小时前
Python-web自动化-selenium(2)
运维·selenium·自动化
Jiozg2 小时前
ES安装到linux(ubuntu)
linux·ubuntu·elasticsearch
小码吃趴菜2 小时前
服务器预约系统linux小项目-第三节课
运维·服务器
面对疾风叭!哈撒给2 小时前
Linux之docker-compose使用(redis、nginx、tdengine、java应用)
linux·redis·docker
zzzsde2 小时前
【Linux】进程(6):程序地址空间
linux·运维·服务器
慵懒的猫mi2 小时前
deepin UOS AI 助手接入钉钉(DingTalk)配置指南
linux·数据库·人工智能·ai·钉钉·deepin