【Linux进程】手把手教你如何调整----进程优先级(什么是优先级?为什么要有优先级?)

news2024/11/28 14:31:33

目录

一、前言

二、优先级的基本概念

🥝 什么是优先级? 

🍍 为什么要有优先级? 

三、如何查看并修改 --- 进程优先级

 🍇 PRI and NI 

🔥PRI🔥

🔥NI🔥

🍉 优先级极限测试

五、共勉


一、前言

        进程优先级是操作中的一个重要概念,我们知道 一个 CPU 只能同时运行一个进程,而进程是由很多个的,所以需要存在进程优先级来确定进程获取 CPU 资源的顺序。那么话不多说,开启我们 进程优先级 的话题。

二、优先级的基本概念

🥝 什么是优先级? 

       在日常生活中,我们有很多排队的场景公路上等红灯在医院挂号或者是在食堂吃饭等等,但是我们在公路上救护车可以无视红灯医院里急诊病人可以优先挂号,以及食堂里老师肆意的插队… 

这些需要排队的事物,就可以看作进程,而像救护车急诊病人,以及食堂的老师等等,这些都是具有优先权的象征,为什么要有优先权呢?一定是有更重要的事情去做

所以,此时就可以延申到 进程 ---- 的优先级是什么?

  • 进程要访问某种资源,进程通过一定的方式(排队),确认享受资源的先后顺序。 

相信细心的你也发现了,优先级不就是我们前面学习的 ---- 权限吗?

  • 其实 优先级 权限 是有区别的:权限决定的是 --- 能不能的问题,而优先级是决定  --- 先后顺序的问题

🍍 为什么要有优先级? 

       如果我们食堂的窗口远大于人数,如果我们自习室里的座位非常多,人却非常少,我们是不需要排队的,也就是说,当资源充足的时候,我们并不需要排队

 --------------所以优先级产生的本质是因为 ----- 【资源相对比较少】

      所以呢,优先权高的进程有优先执行权利,有了优先级;才能使得一些重要的进程被率先执行

三、如何查看并修改 --- 进程优先级

知道了进程优先级的基本概念后,我们来Linux中看看它到底是个什么东西呢? 

  • 我们可以对 运行起来的进程 使用下列指令去查看其优先级
ps -al

 此处我们要关注的是以下几个重要信息:

  • UID : 代表执行者的身份
  • PID : 代表这个进程的代号
  • PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号
  • PRI :代表这个进程可被执行的优先级,其值越小越早被执行
  • NI :代表这个进程的nice值


 🍇 PRI and NI 

 那我们重点来讲解一下这两个信息值

  • 对于 PRI 还是比较好理解的,即 进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高
  • 那 NI 呢? 就是我们所要说的 nice 值了,其表示进程可被执行的优先级的修通俗简单一点来讲呢,就是进程的 nice 值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化。


为了更直观的看到优先级,我们可以执行下面的代码:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

int main()
{
	while(1)
	{
		printf("this is a process, pid=%d\n", getpid());
		sleep(1);
	}
	return 0;
}

 🔥PRI🔥

 我们让改程序跑起来变为进程,我们使用如下命令查看 进程属性

ps -la#显示当前用户的所有进程

我们看到,横着 紫色 框是我们启动的进程竖着的 紫色 框有一栏叫做 PRI 的数值,其实 PRI 就是 priority ,优先权的意思 

竖着 紫色 里是优先级,而优先级具有数值,那么就一定是 task_struct 里的一个属性:  

struct task_struct
{
	int PRI;//优先级
	//...
}

 而我们运行自己写的程序,查询改进程的权限为80,这也就说明 Linux下进程的优先级本质就是数字

其实Linux下优先级是可以被修改的,修改范围为 [60, 99] 这40范围内,且 进程的默认权限值是80而优先级 数字越小,表示该进程的 优先级越高! 


🔥NI🔥

我们清楚了进程的优先级是什么,以及为什么,接下来我们看一下到底该怎么做? 

运行上面的程序,打印出进程的pid,使用 top 命令进入到 Linux任务管理器: 

top#进入任务管理器

  • 接下去按下 R/r 之后,就会跳出来下面这句话,这里的 renice 指的就是要重新修改进程,此时 shell 正在等待我们输入进程的 PID 值,那我们就可以输入上方的 5479
PID to renice [default pid = 1]

  • 然后呢,我们看到 shell 又在等待我们输入需要更改的 nice 
Renice PID 25761 to value

  •  输入要修改的值即可,比如,这里我输入10:

  • 这个时候再使用ps查看,就会发现进程的PRI这一项变为了90,但是我们发现,不仅仅是PRI这一栏变了,还有一栏叫做 NI 的值也变了,而且还刚刚好是我们输入的数值!

 其实,Linux系统支持用户调整优先级,但并 不是让用户直接修改 pri 值,而是修改 nice 值。而 nice 值 不是 优先级,而是 优先级的 修正数据

  • 所以真正的优先级应该是:pri = pri(old) + nice ;old指老的优先级
  • 所以我们刚刚 修改的并不是优先级,而是nice值

🍉 优先级极限测试

进程的优先级真的只能在 [60,99] 这个范围呢移动吗?如果不相信,我们可以来做一下极值测试:

 我们将程序的进程值调到 尽可能的大

  • nice值变为19,pri变为99,就是我们给出的最大范围
  • 如果我们把nice值设置为-10

我们发现,进程的pri变为了70,但是我们刚才不是刚把进程的优先级调至为99吗?

  • 其实这是因为:pri(old),是指老的优先级,这个优先级永远是80! 所以再次调整时,还是从80开始变化。

  • 我们把nice值设置为极小: 

  •  进程的pri果然为60,所以nice值的范围就是 [-20, 19] 。

 可能你会有疑问,为什么要给进程优先级加上限制范围呢? 

  •   如果不加限制,把自己的优先级调整的非常高,别人的优先级非常低,又因为OS是根据进程的pri来执行先后顺序的,这样做可能就会打乱操作系统执行顺序。
  •   这样常规进程就很难分配到资源,是不是有点 “兴,百姓苦,亡,百姓苦” 的感觉了,其实这就是一种 进程饥饿 的问题

为了尽量避免进程饥饿的问题,现在的任何分时操作系统,都是较为公平的进行调度。 

五、共勉

       以下就是我对【Linux系统编程】Linux下进程优先级 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新【Linux系统编程】请持续关注我哦!!! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1848263.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关键属性描述ASYNC_REG

关键属性描述 属性信息 本章提供有关XilinxVivadoDesign Suite属性的信息。条目 每个属性包含以下信息&#xff08;如适用&#xff09;&#xff1a; •物业说明&#xff0c;包括其主要用途。 •支持该特性的Xilinx FPGA体系结构&#xff0c;包括UltraScale™ 架构设备&#xff…

【fiddler】fiddler抓取websocket

1.先了解websocket流 下载4.5版本以上的fiddler 如图所示&#xff1a;在rules--customize rules 里面插入以下代码&#xff1a; static function OnWebSocketMessage(oMsg: WebSocketMessage) { // Log Message to the LOG tab FiddlerApplication.Log.LogString(oMsg.ToStr…

docker最详细基础教程:如何在Win11中使用docker desktop

目录 前言 界面说明 设置界面翻译图一些简单说明 主要功能界面介绍 关于切换docker镜像源 如何拉取镜像 搜索镜像 创建容器 docker run命令的OPTIONS详细介绍 设置容器名词 以后台模式运行容器 端口映射 设置挂载卷 设置环境变量 容器退出后自动删除容器 容器…

如何将 ChatGPT 集成到你的应用中

在当今快速发展的技术环境中&#xff0c;将人工智能聊天解决方案集成到你的应用程序中可以显著提升用户体验和参与度。OpenAI 的 ChatGPT 以其对话能力和高级语言理解而闻名&#xff0c;对于希望在其应用程序中实现智能聊天功能的开发人员来说是一个绝佳的选择。那我们今天就来…

【jdk】jdk11 jdk17 jdk21的新特性

前言&#xff1a;按照博主的个人理解&#xff0c;一般来说 除了jdk8时代 说jdk8的新特性是特指jdk8这一个版本的特性&#xff0c;之后例如jdk11 jdk17新特性 都是泛特性 什么意思呢&#xff1f; 比如jdk11新特性&#xff0c;一般是指jdk9——jdk11 这一个泛版本的所有新特性&am…

MATLAB绘图技巧-多边形区域填充图

MATLAB绘图技巧-多边形区域填充图 以下内容来自&#xff1a;科学网—MATLAB绘图技巧-多边形区域填充图 - 彭真明的博文 (sciencenet.cn)START 为了突出某个区域或局部数据的特性&#xff0c;便于数据的可视化和解释&#xff0c;常需要绘制二维区域填充图。MATLAB提供了三种类型…

5G如何推动工业数字化转型?

据中国信息通信研究院测算&#xff0c;5G商用五年来&#xff0c;直接带动经济总产出约5.6万亿元&#xff0c;间接带动总产出约14万亿元&#xff0c;有力促进了经济社会高质量发展。而工业数字化转型&#xff0c;作为应对市场变革的关键战略&#xff0c;也借助5G技术卓越的高带宽…

海南聚广众达电子商务咨询有限公司抖音电商新标杆

在数字经济的浪潮中&#xff0c;抖音电商正成为一股不可忽视的力量。海南聚广众达电子商务咨询有限公司&#xff0c;作为专注于抖音电商服务的领军企业&#xff0c;凭借其专业的团队和创新的思维&#xff0c;不断助力商家在抖音平台上实现商业价值的最大化。 海南聚广众达电子…

几十块就能“开盒”,还能查祖上三代?

近期&#xff0c;网络上突然开始掀起一阵“人肉开盒”风波。明星、博主、素人无一幸免。 隐匿在此般恶劣行径背后的幕后黑手们无视法律、充满戾气。他们才不管你是什么人&#xff0c;只要有哪里让他们不愉快&#xff0c;那么不好意思&#xff0c;马上“开”你没商量。 这个“…

Linux企业实时同步服务---3688字

实时同步服务 正常的互联网公司架构&#xff1a; 内容&#xff1a;每天服务器及服务器上的应用程序等正常使用&#xff08;每天查看&#xff09;比如&#xff1a;邮件&#xff0c;短信&#xff0c;等信息&#xff1b;巡检内容是否正常使用。互联网公司就是底层服务开发、代码运…

【项目实战课】基于TensorRT+YOLOv5的安全帽检测模型部署实战

欢迎大家来到我们的项目实战课&#xff0c;本期内容是《基于TensorRTYOLOv5的安全帽检测模型部署实战》。所谓项目课&#xff0c;就是以简单的原理回顾详细的项目实战的模式&#xff0c;针对具体的某一个主题&#xff0c;进行代码级的实战讲解。 本次主题 目标检测是最基础的计…

带颜色的3D点云数据发布到ros1中(通过rviz显示)python、C++

ros中发布点云数据xyz以及带颜色的点云数据xyzrgb ros中发布点云数据xyz可以直接用python来做或者C(看个人偏好) ros中发布带颜色的点云数据xyzrgb环境1.新建ROS工作空间2.创建功能包 ros中发布点云数据xyz 可以直接用python来做或者C(看个人偏好) 在这里我们带有颜色的点云数…

LLM大模型开发-基础概论

前言 大家好&#xff0c;我是GISer Liu,好久不见&#xff0c;工作之余&#xff0c;我又来参加DataWhale举办的每月学习赛了&#xff1b;期待这个系列文章能帮助各位读者快速入门LLM开发&#xff0c;希望大家喜欢&#xff1b;Github链接已放在文末&#xff1b; 概述 在这篇文章中…

TCP/IP协议,三次握手,四次挥手,常用的协议

IP - 网际协议 IP 负责计算机之间的通信。 IP 负责在因特网上发送和接收数据包。 HTTP - 超文本传输协议 HTTP 负责 web 服务器与 web 浏览器之间的通信。 HTTP 用于从 web 客户端&#xff08;浏览器&#xff09;向 web 服务器发送请求&#xff0c;并从 web 服务器向 web …

鸿蒙开发:【信息传递载体Want】

Want概述 Want的定义与用途 [Want]是一种对象&#xff0c;用于在应用组件之间传递信息。 其中&#xff0c;一种常见的使用场景是作为[startAbility()]方法的参数。例如&#xff0c;当UIAbilityA需要启动UIAbilityB并向UIAbilityB传递一些数据时&#xff0c;可以使用Want作为…

NVIDIA Broadcast+普通麦克风+ai

关于 NVIDIA Broadcast NVIDIA Broadcast 通过 AI 的强大功能将标准网络摄像头和麦克风升级为高级智能设备&#xff0c;将任何房间转变为家庭工作室。通过麦克风噪声和房间回声消除、虚拟背景、网络摄像头自动取景和视频噪声消除等 AI 功能提高直播的视频和音频质量。借助 NVI…

Python基础教程(二十八):pip模块

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

MySQL之复制(九)

复制 复制管理和维护 确定主备是否一致 在理想情况下&#xff0c;备库和主库的数据应该是完全一样的。但事实上备库可能发生错误并导致数据不一致。即使没有明显的错误&#xff0c;备库同样可能因为MySQL自身的特性导致数据不一致&#xff0c;例如MySQL的Bug、网络中断、服务…

Spring之IoC(容器配置、Spring坐标导入、获取bean)

这里的话&#xff0c;因为博主学习时间有限&#xff0c;并没有实际去操作&#xff0c;只是学习和了解一个大概的流程。 目录 一、引言 1、管理什么&#xff1f;&#xff08;对象&#xff1a;Service、Dao ...&#xff09; 2、如何将被管理的对象告知 IoC 容器?&#xff08;用…

Android入门第70天-调用手机摄像头拍照的最全讲解

背景 涉及手机摄像头的应用太多了,有拍照、有摄像、有二维码、条码的扫描。还有AI领域的拍照识图。 无处不使用摄像头。 网上充斥着大多教程,无一例是可以把摄像头给真正驱动起来和完成一个高清拍照并取出照片进行后续处理的流程。这的确是一个不健康的现象。 本篇教程就是…