当前位置: 首页 > news >正文

【Linux】进程优先级

🌎进程的优先级


文章目录:

进程状态

    优先级相关
      什么是优先级
      为什么要有优先级
      进程的优先级

    调整进程优先级
      调整优先级
      优先级极限测试

    Linux的调度与切换

    总结


前言:

  进程优先级是操作系统中的一个重要概念,它直接影响着进程的调度顺序和执行权。了解进程优先级对于理解和优化系统的性能至关重要。那么话不多说,开启我们今天的话题!

在这里插入图片描述


🚀优先级相关

✈️什么是优先级

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

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

在这里插入图片描述

  所以我们就知道优先级是什么?进程要访问某种资源,进程通过一定的方式(排队),确认享受资源的先后顺序。

  相信细心的你也发现了,优先级不就是我们前面学习的权限吗?其实优先级和权限是有区别的:权限决定的是能不能的问题,而优先级是决定先后顺序的问题


✈️为什么要有优先级

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

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


✈️进程的优先级

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

#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;
}

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

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

在这里插入图片描述

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

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

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

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

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


🚀调整进程优先级

✈️调整优先级

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

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

top#进入任务管理器

在这里插入图片描述

  打开top进入到任务管理器之后,输入 ‘r’ ,进入 修改进程权限的操作,再 输入进程标识符

在这里插入图片描述
  接着就会有文字提示:

在这里插入图片描述

  再输入要修改的值即可,比如,这里我输入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系统编程重要知识,我们提前了解一下:

  我们之前说过,CPU并不会把一个进程全部执行完才切换下一个进程,而是 基于时间片进行轮转执行的。而关于进程的调度与切换,有以下几个相关特性:

  • 竞争性系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理竞争相关资源,便有了优先级。

  这里前面谈过了,为了避免竞争饥饿问题,操作系统会合理的给进程分配各种资源。

  • 独立性多进程运行,需要独享各种资源,多进程运行期间互不干扰。

  进程的独立性是学习Linux系统编程特别重要的一个知识,多个进程在系统里同时运行,但是他们互不干扰,一个进程挂了不会影响另外的进程,就算是父子进程也是如此。

  • 并行多个进程在多个CPU下分别同时运行,称为并行。

  如果一台电脑有多个CPU,并且每个CPU下有对应数量的进程分别同时运行,那么就称之为并行。

  • 并发多个进程在一个CPU下采用进程切换的方式,在一段时间之内让多个进程都得以推进,称为并发。

  并发与并行不同,我们大部分人的电脑其实只有一个CPU,而进程通常会有多个,为了考虑资源分配等问题,每个进程都有自己的时间片,时间片用完就切换下一个进程,自己则重新排队,等待再次调度。
  虽然每次CPU执行任务只执行很少的时间片,但是对于我们人类来说并看不出来进程是在不断切换的。多个进程在一个CPU下采用进程切换的方式,一段时间内让多个进程都能推进任务,称之为并发。

在这里插入图片描述


📒✏️总结

  •  在操作系统中,资源总是少数,所以进程需要使用排队的方式,来获取资源,而有些重要的进程优先级较高,可以插队。
  •  进程的优先级是可调整的,调整范围为:[60, 99],实际上我们调整的是进程的nice值,nice值的范围是[-20, 19]。
  •  进程的调度和切换是操作系统中重要的概念,其中 竞争、独立、并发、并行 这些概念比较常见。

在这里插入图片描述
  如果这篇文章对你有帮助的话,还望留下一个小小的赞呀~~

相关文章:

【Linux】进程优先级

&#x1f30e;进程的优先级 文章目录&#xff1a; 进程状态 优先级相关       什么是优先级       为什么要有优先级       进程的优先级 调整进程优先级       调整优先级       优先级极限测试 Linux的调度与切换 总结 前言&#xff1a; 进程…...

Fair Data Exchange:区块链实现的原子式公平数据交换

1. 引言 2024年斯坦福大学和a16z crypto research团队 论文 Atomic and Fair Data Exchange via Blockchain 中&#xff0c;概述了一种构建&#xff08;包含过期EIP-4844 blobs的&#xff09;fair data-markets的协议。该论文源自a16z crypto的暑期实习计划&#xff0c;与四名…...

详解优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器

代码示例在最后。 认识一下ThreadPoolTaskExecutor org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor这是由Sping封装的加强版线程池&#xff0c;其实是Spring使用装饰者模式对ThreadPoolExecutor进一步优化。 它不仅拥有ThreadPoolExecutor所有的核心参数…...

Vue3+TS+Vite 找不到模块“@/components/xxx/xxx”或其相应的类型声明

引入vue文件时文件是存在的&#xff0c;引入路径也是对的&#xff0c;报找不到模块&#xff0c;有一些解决方案是在tsconfig.json里面做一些配置&#xff0c;大家可以自行百度&#xff08;不知道是不是我百度的不对&#xff0c;我的没有解决&#xff09;还有一种是在项目根目录…...

Vue3-响应式基础:单文件和组合式文件

单文件&#xff1a;html <!DOCTYPE html> <html> <head><title>响应式基础</title> </head> <body><div id"app" ><!-- dynamic parameter:同样在指令参数上也可以使用一个 JavaScript 表达式&#xff0c;需要包…...

DVWA-File Upload文件上传

什么是文件上传漏洞&#xff1f; 黑客利用文件上传后服务器解析处理文件的漏洞上传一个可执行的脚本文件&#xff0c;并通过此脚本文件获得了执行服务器端命令的能力。 造成文件上传漏洞的原因: 1.服务器配置不当 2.开源编辑器上传漏洞 3.本地文件上传限制被绕过 4.过滤不严格被…...

python之word操作

#pip install python-docx import docx import os pathos.path.abspath(__file__) file_pathos.path.join(path,"大题.docx") print(path) print(file_path) objdocx.Document("大题.docx") #第一个段落 p1obj.paragraphs[2] # print(p1.text) #所有段落 #…...

Linux下新增有root权限的用户

步骤&#xff1a; 1.以 root 用户身份登录到 CentOS 服务器。 2.使用以下命令创建新用户&#xff08;将 newuser 替换为您想要创建的用户名&#xff09;&#xff1a; sudo adduser username 3.为新用户设置密码&#xff1a; sudo passwd username 按照提示输入新增用户密码 …...

RPC通信原理(一)

RPC通信原理 RPC的概念 如果现在我有一个电商项目&#xff0c;用户要查询订单&#xff0c;自然而然是通过Service接口来调用订单的实现类。 我们把用户模块和订单模块都放在一起&#xff0c;打包成一个war包&#xff0c;然后再tomcat上运行&#xff0c;tomcat占有一个进程&am…...

修改/etc/resolve.conf重启NetworkManager之后自动还原

我ping 百度报错&#xff1a; [rootk8snode1 ~]# ping baidu.com ping: baidu.com: Name or service not known很明显&#xff0c;这是DNS解析问题。 于是我修改 /etc/resolv.conf 文件后&#xff0c;执行完sudo systemctl restart NetworkManager&#xff0c;/etc/resolv.con…...

Web前端依赖版本管理最佳实践

本文需要读者懂一点点前端的构建知识&#xff1a; 1. package.json文件的作用之一是管理外部依赖&#xff1b;2. .npmrc是npm命令默认配置&#xff0c;放在工程根目录。 Web前端构建一直都是一个不难&#xff0c;但是非常烦人的问题&#xff0c;在DevOps、CI/CD领域。 烦人的是…...

多线程进阶

一.常见的锁策略 这里所讲的锁&#xff0c;不是一把具体的锁&#xff0c;而是锁的特性 1.乐观锁和悲观锁 悲观乐观是对锁冲突大小的预测 若预测锁冲突概率不大&#xff0c;就可能会少一些工作&#xff0c;那就是乐观锁&#xff1b;反之就是悲观锁 总是假设最坏的情况&…...

总结linux常用命令

Linux常用命令总结如下&#xff1a; 文件与目录操作&#xff1a; ls&#xff1a;列出目录内容cd&#xff1a;改变当前目录pwd&#xff1a;显示当前工作目录mkdir&#xff1a;创建新目录cp&#xff1a;复制文件或目录rm&#xff1a;删除文件或目录mv&#xff1a;移动或重命名文件…...

C++ 枚举

C 枚举 5.4.1普通枚举 枚举的定义&#xff1a;&#xff0c;枚举类型是通过enum关键字定义的&#xff0c;比如定义颜色类型 enum Color {RED, // 默认值为0GREEN, // 默认值为1BLUE // 默认值为2 }; Color myColor RED;注意&#xff1a; &#xff08;1&#xff09;括…...

Vue2在一个页面内动态切换菜单显示对应的路由组件

项目的需求是在一个页面内动态获取导航菜单&#xff0c;导航菜单切换的时候显示对应的路由页面&#xff0c;类似于tab切换的形式&#xff0c;切换的导航菜单和页面左侧导航菜单是同一个路由组件&#xff0c;只是放到了一个页面上&#xff0c;显示的个数不同&#xff0c;所有是动…...

执行任务赚积分C卷(JavaPythonC++Node.jsC语言)

现有N个任务需要处理,同一时间只能处理一个任务,处理每个任务所需要的时间固定为1。 每个任务都有最晚处理时间限制和积分值,在最晚处理时间点之前处理完成任务才可获得对应的积分奖励。 可用于处理任务的时间有限,请问在有限的时间内,可获得的最多积分。 输入描述 第一…...

接口测试之文件下载

在工作中对于下载接口&#xff0c;经常会有这样的疑问&#xff1a;这类接口一般功能比较稳定&#xff0c;但是又比较重要&#xff0c;需要占用回归测试时间&#xff0c;有没有可替代的方式&#xff1f; 答案肯定是有的&#xff0c;可以从接口测试/UI自动化测试介入&#xff0c…...

算法思想总结:双指针算法

一、移动零 . - 力扣&#xff08;LeetCode&#xff09; 移动零 该题重要信息&#xff1a;1、保持非0元素的相对位置。2、原地对数组进行操作 思路&#xff1a;双指针算法 class Solution { public:void moveZeroes(vector<int>& nums){int nnums.size();for(int cur…...

python中的zip函数

1.zip&#xff08;&#xff09;同时迭代多个列表、字典等 使用zip()可以同时迭代多个可迭代对象&#xff0c;如列表、字典。 注意&#xff1a;当若干个可迭代对象的长度不相等时&#xff0c;zip()函数会停止在最短的可迭代对象。 例子&#xff1a; # 定义可迭代对象 numbers …...

Element 选择季度组件

<template><el-dialogtitle"选择季度":show-close"false":close-on-click-modal"false":close-on-press-escape"false":visible"visiable"class"dialog list"append-to-body><div><div>&…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据&#xff01;该数据集源自2025年4月发表于《地理学报》的论文成果…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日&#xff0c;嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;海云安高敏捷信创白盒&#xff08;SCAP&#xff09;成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解…...