【Linux】进程周边之优先级

devtools/2024/10/4 7:18:20/

目录

一、优先级

1.为什么要有进程优先级?

2.什么是进程优先级?

3.优先级的初始设定

3.1 PRI 和 NI

3.2如何修改优先级?(sudo/root)

3.2.1 概念:

3.2.2 如何查看进程的优先级?

3.3.3 或者查看某个特定进程的优先级?

3.3.4使用top指令修改NI

3.3.5 使用renice指令修改NI

3.3为什么优先级不能随意修改?

3.4进程相关的一些概念


一、优先级

1.为什么要有进程优先级?

资源过少!

当计算机中的某种资源数量,与即将使用该资源的进程数量相比,比较少。

不能立刻满足进程的需求。

因此,进程需要进行排队,等待这种资源。

使用优先级,确定进程被执行的先后顺序。

2.什么是进程优先级?

  • cpu资源分配的先后顺序,就是指进程的优先权(priority)。
  • 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。
  • 还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。

3.优先级的初始设定

3.1 PRI 和 NI

在Linux中,优先级就是一个int类型的变量。

  • PRI : 代表这个进程可被执行的优先级, 其值越小越早被执行
  • NI :代表这个进程的nice值, 我们通常通过修改nice值来修改PR

在进程控制块PCB中,对于进程优先级、以及相关变量NI 是这样定义的。


在Linux中,默认的优先级是80。

Linux优先级是可以被修改的,Linux的优先级的范围[60,99],总共40个优先级。

Linux优先级本质就是数字,数字越小,优先级越高


3.2如何修改优先级?(sudo/root)

3.2.1 概念:

 PRI(新) = PRI(old)+ NI
 

对以上公式做出解释:

🔥PRI(old) = 80

🔥Linux系统允许用户调整优先级,但是不能直接让你修改pri,而是修改 NI 值 

        NI 不是优先级,而是进程优先级的修正数据!

  • PRI取值范围[60,99]
  • nice值取值范围[-20,19]


3.2.2 如何查看进程的优先级?
ps -al

3.3.3 或者查看某个特定进程的优先级?
ps -al | head -1 && ps -al | grep 特定进程的pid/进程名


3.3.4使用top指令修改NI

  1. 输入top启动任务管理器
  2. 输入r(renice)来修改NI的值
  3. 再输入目标进程的pid来定位
  4. 输入想要修改的NI值(注意不是输入PRI值)

top修改进程优先级

3.3.5 使用renice指令修改NI
renice NI的值 对应进程的pid


 辨析:权限vs优先级

权限:能不能

优先级:可以执行,但是被执行的时间早晚。


3.3为什么优先级不能随意修改?

 为什么修改优先级,只能在规定的【60,99】这个区间,反而不能无下限无上限的修改?

这是因为,操作系统在调度进程时,需要较均衡的让每一个进程都要得到调度。
如果用户无下限的修改优先级,始终会有优先级高的进程不断产生,
而那些,优先级较低的进程,长时间得不到CPU的资源。

这就是是进程饥饿问题的产生。

3.4进程相关的一些概念

  • 竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便有了优先级。
  • 独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰。
  • 并行: 多个进程在多个CPU下分别同时进行运行,这称之为并行。
  • 并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发

并行与并发在之后的文章中还会提到!大家要对这两个概念有了解。


💗感谢阅读!💗


http://www.ppmy.cn/devtools/120554.html

相关文章

开源大模型 vs闭源大模型

在人工智能(AI)领域,如何评价一个AI模型的优劣和发展前景,是一个复杂而又广泛讨论的问题。在这个过程中,"开源"和"闭源"的发展路径成为绕不开的两条道路。开源模式以共享知识和技术进步为宗旨&…

解决MySQL报Incorrect datetime value错误

目录 一、前言二、问题分析三、解决方法 一、前言 欢迎大家来到权权的博客~欢迎大家对我的博客进行指导,有什么不对的地方,我会及时改进哦~ 博客主页链接点这里–>:权权的博客主页链接 二、问题分析 这个错误通常出现在尝试将一个不…

第十章 MySQL主从复制搭建Docker版

目录 1.新建主服务器容器示例3307 2. 进入/mydata/mysql-master/conf目录下创建my.cnf配置 3.修改完配置后重启master实例 4.进入mysql-master容器 5.master容器实例内创建数据同步的用户 6.新建从服务器容器实例3308 7.进入/mydata/mysql-slave/conf目录下新建my.c…

SQL高可用优化-优化SQL中distinct和Where条件对索引字段进行非空检查语句

最近做一个需求,关于SQL高可用优化,需要优化项目中的SQL,提升查询效率。 SQL高可用优化 一、优化SQL包含distinct场景二、优化SQL中Where条件中索引字段是否为NULL三、代码验证1. NodeMapper2. NodeService3. NodeController4.数据库数据5.项…

JSON 教程

JSON 教程 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head> …

Axios入门使用

文章目录 Axios入门使用一、引言二、Axios的安装与配置1、安装Axios2、创建Axios实例 三、发送HTTP请求1、GET请求2、POST请求3、并发请求 四、配置和拦截器1、配置默认值2、拦截器 五、错误处理和取消请求1、错误处理2、取消请求 四、总结 Axios入门使用 一、引言 随着前端技…

JVM(HotSpot):堆空间(Heap)以及常用相关工具介绍

文章目录 一、内存结构图二、堆的定义三、堆内存溢出四、堆内存排查工具 一、内存结构图 二、堆的定义 1、通过new关键字创建的对象&#xff0c;都会放到堆空间中。 2、它是线程共享的&#xff0c;堆中的对象都要考虑线程安全问题。 那有同学肯定会问&#xff0c;方法内通过n…

【力扣 | SQL题 | 每日三题】力扣1148, 1327, 1211, 1174

1. 力扣1148&#xff1a;文章浏览1 1.1 题目&#xff1a; Views 表&#xff1a; ------------------------ | Column Name | Type | ------------------------ | article_id | int | | author_id | int | | viewer_id | int | | view_date …