深入解析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通过进程/线程切换实现并发。

相关推荐
未济3 天前
linux 配置环境变量
linux
傲世仙尊3 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
_艾伦 耶格尔.3 天前
进程间通信
linux
Liuqy-053 天前
Linux IO编程——静态库、动态库
linux
彧azz3 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
-梅3 天前
linux(8) 软硬链接
linux·运维·服务器
Wang's Blog3 天前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发
AIgorithmGEEK3 天前
[Linux]线程三部曲(上):一个执行流的诞生——从操作系统一路拆到 pthread_create
linux·线程·pid
琥珀色糖3 天前
SimlpeHttp
linux·服务器