深入解析Linux进程优先级机制

文章目录

    1. 进程优先级基本概念
    • 1.1 是什么?
    • 1.2 优先级 VS 权限
    • 1.3 为什么存在优先级
    1. 如何查看系统进程
    1. PRI && NI
    1. 如何查看优先级
    1. 竞争、独立、并行、并发

1. 进程优先级基本概念

1.1 是什么?

进程优先级是操作系统用来决定哪个进程优先获得CPU资源的机制。优先级高的进程会被优先调度执行,确保系统资源合理分配。

1.2 优先级 VS 权限

简单来说,权限是能不能的问题,优先级时已经能了,先后的问题

a.优先级
用于决定任务或资源的处理顺序,通常与时间、性能或紧急程度相关
b.权限
控制对系统资源的访问能力,属于安全范畴

1.3 为什么存在优先级

核心原因在于资源不足,CPU数量有限,设置优先级就设置了某种资源的分配顺序

优化效率、平衡公平性,或在特定目标下实现资源最大化利用。


2. 如何查看系统进程

bash 复制代码
//输入
ps -l

3. PRI && NI

3.1. PRI(进程优先级)

定义表示进程的实际调度优先级,由内核动态计算得出,数值越小优先级越高(范围通常为0~139)。

计算公式PRI(new) = PRI(old) + nice 其中PRI默认为80,NI为用户设置的优先级偏移值。

特点

调度器根据PRI决定进程获取CPU资源的顺序。

不可直接修改,其值随NI的变化而动态调整。

3.2. NI(Nice Value)

定义 :用户可调整的进程优先级偏移值,范围通常为-20~19。

作用

NI > 0:降低优先级(如NI=5 → PRI升高为85)。NI < 0:提升优先级(如NI=-5 → PRI降低为75)。NI=0:保持默认优先级(PRI=80)。

调整方式

启动时设置

bash 复制代码
nice -n 5 ./script.sh  # 以NI=5启动进程

运行时修改

bash 复制代码
renice -n -5 -p 1234  # 将PID=1234的进程NI改为-5

权限限制

普通用户仅能提升NI值(降低优先级),降低NI值(提升优先级)需root权限。

3. PRI与NI的关系示例

NI值 PRI计算结果(Base=80) 实际优先级效果
-20 80 + (-20) = 60 最高优先级
0 80 + 0 = 80 默认优先级
19 80 + 19 = 99 最低优先级

3.4. 查看进程优先级

bash 复制代码
ps -eo pid,comm,ni,pri  # 列示进程的PID、命令、NI、PRI

输出示例:

复制代码
PID   COMMAND   NI   PRI
1234  python    0    80
5678  backup    10   90

3.5. 使用场景

  • 高优先级任务 :实时数据处理(如NI=-10)。

  • 低优先级任务 :后台备份任务(如NI=10)。

  • 系统稳定性:避免普通用户抢占关键系统资源。


4. 如何查看优先级

基础用法:直接在终端输入:

bash 复制代码
top

常用命令行参数

参数 功能 示例
-d <秒> 刷新间隔时间 top -d 5(每 5 秒刷新)
-p <PID> 监控特定进程 top -p 1234
-u <用户名> 显示指定用户的进程 top -u root
-n <次数> 刷新次数后退出 top -n 3(刷新 3 次后退出)
-b 批量模式(可重定向输出) top -b > log.txt

5. 竞争、独立、并行、并发

a. 竞争(Race Condition)

多个进程或线程同时访问共享资源,且最终结果取决于执行顺序。

b. 独立(Isolation)

进程或线程之间互不干扰,各自拥有独立的资源(如内存空间)。Linux中每个进程有独立的虚拟地址空间

c.并行(Parallelism)

多任务真正同时执行,依赖多核CPU或分布式系统。

d.并发(Concurrency)

多任务交替执行,通过时间片轮转模拟"同时"效果。单核CPU通过进程/线程切换实现并发。

相关推荐
松涛和鸣2 小时前
72、IMX6ULL驱动实战:设备树(DTS/DTB)+ GPIO子系统+Platform总线
linux·服务器·arm开发·数据库·单片机
简单中的复杂2 小时前
【避坑指南】RK3576 Linux SDK 编译:解决 Buildroot 卡死在 host-gcc-final 的终极方案
linux·嵌入式硬件
wVelpro2 小时前
如何在Pycharm 2025.3 版本实现虚拟环境“Make available to all projects”
linux·ide·pycharm
程序员老舅3 小时前
C++高并发精髓:无锁队列深度解析
linux·c++·内存管理·c/c++·原子操作·无锁队列
雨中风华3 小时前
Linux, macOS系统实现远程目录访问(等同于windows平台xFsRedir软件的目录重定向)
linux·windows·macos
爱吃生蚝的于勒4 小时前
【Linux】进程信号之捕捉(三)
linux·运维·服务器·c语言·数据结构·c++·学习
The森4 小时前
Linux IO 模型纵深解析 01:从 Unix 传统到 Linux 内核的 IO 第一性原理
linux·服务器·c语言·经验分享·笔记·unix
期待のcode4 小时前
Redis的主从复制与集群
运维·服务器·redis
翼龙云_cloud4 小时前
腾讯云代理商: Linux 云服务器搭建 FTP 服务指南
linux·服务器·腾讯云
纤纡.4 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql