【Linux】—— 浅谈进程优先级

news2024/11/17 0:55:58

本期,我们将来聊聊的是关于进程优先级的相关知识!!!


目录

序言

(一)基本概念

(二)查看系统进程

1、PRI and NI

2、PRI vs NI

(三)设置优先级


序言

首先,大家对于优先级的概念肯定不会陌生的。在日常生活中,我们可以看到许多不同形式的优先级。

以下是一些常见的优先级案例:

  1. 交通信号灯:交通信号灯通过红、黄、绿等颜色的灯光来表示不同车辆的优先级。例如,红灯表示停止,绿灯表示可以通行,黄灯表示警告或准备停车。

  2. 高速公路上的车道:在高速公路上,不同的车道可能具有不同的优先级。例如,快车道(左侧车道)通常用于超车和高速行驶,而慢车道(右侧车道)用于低速行驶或者准备下道。

  3. 食堂打饭队伍:在食堂中,人们通常会排队等待打饭。按照先后顺序,先来到的人有较高的优先级,可以先打饭。

  4. 紧急救援车辆:紧急救援车辆(如救护车、消防车、警车)在道路上享有较高的优先级。其他车辆需要给予它们让路的权益,以确保它们能够尽快赶到目的地。

  5. 工作任务优先级:在工作场所,任务通常具有不同的优先级。根据任务的重要性和紧急程度,决定哪些任务应该首先完成。

这些都是日常生活中一些常见的优先级案例。通过确定优先级,可以有效地管理和安排任务、资源或行动。

虽然大家都知道有优先级这样的概念,但是大家难道不好奇为什么会有优先级吗?

在生活和工作中,存在优先级是为了帮助我们更有效地管理时间、资源和任务。我们以上诉“食堂打饭” 这个例子给大家举例:

  1. 假如你现在读的学校里面有 1万人,每学期的收费为 100万 ,学校为了让各位同学有更好的体验呢为每个同学都配置私人的做饭阿姨,当你想吃饭时直接去找对应的私厨即可(此时你不用排队,直接去了就可以吃);
  2. 但是事实是这样的吗?事实不是这样的。第一点因为我们没有交那么多的钱,导致没有相应的资源进行同等的支撑,导致资源不够(这就等同于食堂的窗口或者私厨不可能是对应的每个学生一个);
  3. 这就导致最终是在有限的食堂阿姨的忙碌下做好饭菜,从而让我们到有限个的窗口是进行打饭操作。

因此类比上述,我们同样可以知道在计算机系统中,由于 CPU的资源有限,多量进程来竞争少量的资源就会导致多进程竞争问题。因此优先级的概念是为了管理和调度各种任务、进程或线程的执行顺序。


(一)基本概念

上述我们叙述了什么叫做优先级以及为什么要有优先级这样的概念。接下来,我们放在Linux环境下来具体认识。

首先结合Linux下认识其基本概念:

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


(二)查看系统进程

在linux或者unix系统中,用ps –l命令则会类似输出以下几个内容: 

我们很容易注意到其中的几个重要信息,有下:

  • UID : 代表执行者的身份
  • PID : 代表这个进程的代号
  • PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号
  • C:表示进程的CPU占用率
  • PRI :代表这个进程可被执行的优先级,其值越小越早被执行
  • NI :nice值 ,代表这个进程优先级的修正数据
  • ADDR:进程的内存地址空间状态
  • SZ:进程的内存大小(以页面为单位)
  • WCHAN:进程当前位于的内核函数或事件
  • TTY:进程所关联的终端设备
  • TIME:进程已经运行的CPU时间
  • CMD:进程的命令名称

使用【ps –l】命令可以获取比普通ps命令更详细的进程信息,例如进程的用户、父进程、CPU占用率、内存使用情况、优先级等。这有助于更全面地了解系统中运行的进程,并用于调试、性能监控和问题排查等操作。

1、PRI and NI

在Linux中,PRI(Priority)和NI(Nice value)是与进程调度和优先级相关的概念。

接下来,我们具体聊聊这两组概念:

PRI(Priority)

  • PRI也还是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,它是一个整数值;
  • 较小的PRI值表示较高的优先级。PRI决定了进程在竞争CPU时间时的调度顺序。
  • PRI值越小越快被执行,当加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice

NI(Nice value)

  • 就是我们所要说的nice值了,其表示进程可被执行的优先级的修正数值,它允许用户将进程的优先级在一定范围内进行调整;
  • NI的范围也从【-20,19】,其中-20表示最高优先级,19表示最低优先级。较小的NI值表示较高的优先级。
  • 所以,调整进程优先级,在Linux下,就是调整进程nice

在Linux中,每个进程都有一个PRI值和NI值。当多个进程同时需要竞争CPU资源时,调度器会根据进程的PRI和NI值来决定哪个进程获得处理器时间。通常情况下,对于普通用户创建的进程,其PRI值默认为0,而NI值默认为0。

使用NI可以调整进程的优先级,当设置一个较高的NI值时,进程将拥有较低的优先级,使其在竞争CPU时间上处于相对较低的地位。相反,当设置一个较低的NI值时,进程将拥有较高的优先级,有更高的机会获得CPU执行时间。

💨 top命令更改已存在进程的nice:

  • top
  • 进入top后按“r”–>输入进程PID–>输入nice值

接下来,我们以代码的视角带大家去认识:

演示如下:

【注意】

  • 用户通常只能调整自己创建的进程的NI值。修改进程的PRI和NI值可能需要root权限或相应的特权。

2、PRI vs NI

  1. 需要强调一点的是,进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进 程的优先级变化。
  2. 可以理解nice值是进程优先级的修正修正数据

(三)设置优先级

除了上述使用【top】指令之外,还有很多种方式可以对其进行设置。

例如:

在Linux中,可以使用nicerenice命令来调整进程的优先级:

  1. nice命令:将新的进程启动时的优先级设置为指定值。

    • 语法:nice-n <优先级> <命令>
    • 示例:nice-n 10 ./my_program 将以较低优先级(较高的nice值)运行my_program
    • 注意:默认情况下,nice命令将进程的优先级增加到父进程的优先级。
  2. renice命令:修改正在运行的进程的优先级。

    • 语法:renice<优先级> -p <进程ID>
    • 示例:renice-5 -p 1234 将进程ID为1234的进程优先级调整为较高的优先级(较小的优先级值)。
    • 注意:只有具有足够权限的用户才能修改其他用户的进程优先级。

💨 此外,系统还设置一些接口可以帮助我们去对其进行设置:

  • 在Linux中,可以使用 【getpriority】接口函数来获取指定进程或进程组的优先级

以下是【getpriority】函数的详细说明: 

 【分析】

【which】参数是一个常量,用于指定获取优先级的对象类型。常见的取值包括:

  • PRIO_PROCESS:表示根据进程ID获取优先级。
  • PRIO_PGRP:表示根据进程组ID获取优先级。
  • PRIO_USER:表示根据用户ID获取优先级。

who】参数是与【which】相关的ID,用于指定要获取优先级的具体对象。例如,如果【which】PRIO_PROCESS,则who应为要查询的进程的ID。

函数返回值为进程的当前优先级。返回值越小表示较高的优先级,而大于0的返回值表示出现错误。

以下是一个示例,演示如何使用【getpriority】函数获取指定进程的优先级:

#include <stdio.h>
#include <sys/time.h>
#include <sys/resource.h>

int main() {
    int priority = getpriority(PRIO_PROCESS, 895); // 获取进程ID为895的进程的优先级
    if (priority == -1) {
        perror("getpriority");
        return 1;
    }

    printf("Priority of process 895: %d\n", priority);
    return 0;
}

【注意】

只有具有足够权限的用户才能获取其他用户进程的优先级信息。否则将返回错误并设置errnoEPERM(没有操作权限)。因此,在使用【getpriority】函数时,请确保以合适的用户权限运行程序。

 💨 对于更多的进程介绍,大家可以参考:进程基本介绍


总结

以上便是关于进程优先级的全部知识了。感谢大家的观看与支持!!!

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

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

相关文章

关于antdesign-vue的layout组件样式失效问题(#components-layout-demo-custom-trigger)

1.错误描述 使用antdesign vue 中的layout作为主要布局&#xff0c;https://www.antdv.com/components/layout-cn 正常引入后&#xff0c;跟期望的样子不一样 期望中的样子 实际的样子 logo没有了&#xff0c;而且此时也无法更改样式。 此时的样式是这样的 无论怎么修改都…

Grafana 使用Rest API 作为数据源的实践

本文使用最新版本的Grafana 10 进行操作。 如果要使用Rest API 作为grafana 的数据源&#xff0c;可以选择安装一个Infinity的数据源插件。 如果创建数据源时&#xff0c;搜不到infinity&#xff0c;点击find more 查找安装该数据源插件 1. 安装 Infinity 数据源插件&#xf…

IP 协议的相关特性

目录 IP协议有三大特点&#xff1a;无连接、无状态、不可靠。 四位版本号 四位头部长度 八位服务类型: 十六位总长度 16 位标识, 3 位标志, 13 位片偏移 八位生存时间 八位协议 十六位首部校验和 关于IP v4地址不够的问题 ip地址动态分配: ip地址转换(NAT) 数据传输…

一个空的Object在内存中占用几个字节

文章目录 一、对象在内存中的布局1. 对象头1.1. 哈希码&#xff08;Hash Code&#xff09;&#xff1a;1.2. 对象所属的年代&#xff08;Generation&#xff09;&#xff1a;1.3. 对象锁&#xff08;Object Lock&#xff09;&#xff1a;1.4. 锁状态标志&#xff08;Lock State…

POE级联蓝牙定位系统方案_蓝牙信标,蓝牙网关,级联蓝牙网关

近年来,随着新能源行业的快速发展,在化工厂,核电厂以及电力电厂等企业,对人员定位,人员导航,资产定位,生命体征监测的需求越来越大。传统的蓝牙室内定位方案中蓝牙信标为锂亚电池供电,需定期更换电池且有安全隐患,为更好的服务有蓝牙定位导航,被动人员定位,生命体征…

vue创建项目报错npm install --loglevel error --legacy-peer-deps

vue创建项目报错npm install --loglevel error --legacy-peer-deps 如图所示&#xff1a; 话不多说&#xff0c;直接上解决方法&#xff1a; 1、找到这两个文件&#xff08;每个人的位置不一样&#xff0c;像我是安装在D盘&#xff09; 2、分别点进去&#xff0c;右键—属性…

A Survey on Evaluation of Large Language Models

这是LLM相关的系列文章&#xff0c;针对《A Survey on Evaluation of Large Language Models》的翻译。 大型语言模型评价综述 摘要1 引言2 背景2.1 大语言模型2.2 AI模型评估 3 评估什么3.1 自然语言处理任务3.1.1 自然语言理解3.1.2 推理3.1.3 自然语言生成3.1.4 多语言任务…

vue——接口修改请求头——有些接口不需要请求头传递token——基础积累

最近在写后台管理系统的时候&#xff0c;遇到一个切换租户的功能。在请求接口的时候不需要传递token 直接上代码吧&#xff1a; 1.html代码 login2(this.user.id, this.ruleForm.tenantType) .then(this.afterLogin) .finally(() > {this.confirmLoading false;if (this…

ja3指纹和akamai指纹

问题&#xff1a; 请求失效&#xff0c;带上抓包软件却可以->检测ja3浏览器指纹 方法&#xff0c;python 安装curl_cffi库 pip install curl_cffi 查看浏览器指纹 https://tls.browserleaks.com/json python 原生request 缺少两个指纹 使用curl_cffi之后 可以看到结果…

多模态系列论文--BLIP 详细解析

论文地址&#xff1a;BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation 论文代码&#xff1a;https://github.com/salesforce/BLIP BLIP 1 研究动机及本文贡献2 相关工作2.1 ALBEF模型2.2 VLMO模型 3 本文贡献1--U…

LLaMA: Open and Efficient Foundation Language Models

背景 用最少的计算资源&#xff0c;解决了LLM大模型预测问题&#xff0c;训练了一些列的LLaMa模型&#xff0c;在参数量比较少的情况下&#xff0c;达到业界大模型效果。 主要贡献就是提升了LLM模型的训练速度和效率&#xff0c;在小容量的基础上&#xff0c;大大提升了模型的…

C语言 - AES软件加解密算法

概述 &#xff08;AES&#xff09;RIJNDAEL算法是一个数据块长度盒密钥长度都可变的分组加密算法&#xff0c;其数据块长度和密钥长度都可独立地选定为大于等于128位且小于等于256位的32位任意倍数。深入学习请参考《密码学》书籍&#xff0c;谢谢各位参阅。 验证环境&#xf…

Git基本操作:版本打Tag的作用以及基本操作流程

作用介绍 在git代码管理时&#xff0c;有时候我们想对某个特定的commit 添加标记&#xff0c;比如要标识版本信息&#xff0c;这时候就可以用的git中的打标签功能。 打tag就类似于我们看书放书签一样&#xff0c;以后可以直接用tag找到提交的位置&#xff0c;不然的话&#x…

devtools热部署的使用

引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency>idea开启热部署 改动后 ctrl …

解决:yarn 无法加载文件 “C:\Users\admin\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本“ 的问题

1、问题描述&#xff1a; 其一、报错的整体代码为&#xff1a; yarn : 无法加载文件 C:\Users\admin\AppData\Roaming\npm\yarn.ps1&#xff0c;因为在此系统上禁止运行脚本 // 整体的报错代码为 &#xff1a; yarn : 无法加载文件 C:\Users\admin\AppData\Roaming\npm\yar…

Django_测试模块(六)

目录 开始写我们的第一个测试 首先得有个 Bug 创建一个测试来暴露这个 bug 运行测试 修复这个 bug 更全面的测试 测试视图 针对视图的测试 Django 测试工具之 Client 改善视图代码 测试新视图 测试 DetailView 集中管理用例文件 使用Django测试运行器 源码等资料…

国风美少女【InsCode Stable Diffusion 美图活动一期】

一、 Stable Diffusion 模型在线使用地址&#xff1a; https://inscode.csdn.net/inscode/Stable-Diffusion 二、模型相关版本和参数配置&#xff1a; Steps&#xff08;采样迭代步数&#xff09;: 20 Sampler&#xff08;采样方法&#xff09;: Euler a 采样迭代步数(Steps)Sa…

Spring Boot 中的 @Field 注解详解

Spring Boot 中的 Field 注解详解 引言 Spring Boot 是目前 Java 生态圈中最受欢迎的 Web 应用开发框架之一&#xff0c;它提供了很多优秀的功能和工具&#xff0c;可以帮助开发者快速构建高效、可靠的 Web 应用程序。其中一个重要的功能就是数据绑定和验证&#xff0c;Sprin…

CRM系统中AI如何进行销售线索评分?有什么好处(下)

好的CRM解决方案既要充分利用销售人员的经验和技能&#xff0c;又要尽可能地消除人为错误。其底层逻辑是&#xff0c;从过程中消除不可预测的人为因素&#xff0c;同时利用好人的自然技能。基于此&#xff0c;AI人工智能被引入CRM客户管理系统&#xff0c;可以说CRM销售线索评分…

如何使用 Docker 部署 FreeGPT-WebUI:一个简单的教程

目录 1. FreeGPT-WebUI 项目简介 2. 安装 Docker 3. 从 Docker Hub 拉取 FreeGPT-WebUI 镜像 4. 使用 Docker 运行 FreeGPT-WebUI 应用程序 5. 访问 FreeGPT-WebUI 应用程序 总结 在本教程中&#xff0c;我们将了解如何使用 Docker 部署 FreeGPT-WebUI&#xff0c;一个基…