深入解析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 小时前
09-读写多个sys属性文件
linux
小张成长计划..2 小时前
【Linux】25:线程概念和控制
java·linux·jvm
硅基手札2 小时前
【Linux 内核专栏 18】进程间通信 IPC(下)— Socket·Netlink·fd 三件套·futex·线程同步
linux·运维·驱动开发·单片机·嵌入式硬件·mcu·架构
吴佳浩 Alben2 小时前
一文看懂大模型推理为什么需要多卡:从 TP、DP 到 Runtime 的完整演进
运维·服务器·人工智能·深度学习·语言模型·vllm·sglang
djjjx.2 小时前
Linux进程篇(二):深入浅出 [进程概念与进程父子关系]:从底层原理到实战应用
linux·运维·服务器
鬼手点金11 小时前
nanoGPT/nanochat 能做出 DeepSeek/Qwen 这样的大模型吗?
服务器·前端·javascript·bug·openclaw
贵州诚鑫致达科技有限公司11 小时前
Linux的yum源怎么重启?源不是服务
linux·运维·服务器
遇印记12 小时前
传输层,网络层
运维·服务器·网络·windows·学习
Elastic 中国社区官方博客13 小时前
一条 ES|QL 查询,涵盖365天的审计日志:在热数据和可搜索快照上执行相同的搜索
大数据·运维·服务器·elasticsearch·搜索引擎·全文检索
北京中科新远科技13 小时前
高速光模块上线验收实战:DOM、FEC、BER与端口计数器怎么一起看
服务器·网络·php