【Linux系统编程】进程优先级

文章目录

  • 1. 优先级的基本概念
  • 2. 为什么存在优先级
  • 3. 查看系统进程
  • 4. PRI and NI
  • 5. top命令修改已存在进程的nice值
  • 6. 其他概念

1. 优先级的基本概念

本篇文章讲解进程优先级,首先我们来了解一下进程优先级的概念:

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

这是优先级的概念

我们之前学习过权限,权限决定的是能不能的问题。比如你想对某个文件进行修改操作,那要看你有没有对应的权限,有的话,你才能做。
而优先级呢是在能做的基础上,决定谁先谁后的问题。
比如我们在学校吃饭,餐厅的窗口数量是有限的,我们去买饭的时候如果人比较多那我们需要排队。那排队的这些学生,它们都可以打饭,但是要有一个先后顺序,那正常情况下排在前面的同学它打饭的优先级就高,可以先打;排在后面的同学优先级就低。

2. 为什么存在优先级

那为什么会存在优先级呢?

资源有限。
就好比我们在学校买饭为什么要排队呢?为什么要有先后呢?
因为窗口的数量有限,如果一个学生一个窗口,那就不用排了。
那进程为什么也有优先级呢?
因为CPU资源有限。

那我们了解了什么是优先级和为什么存在优先级之后,下面我们就来具体看看Linux上进程的优先级是什么样子的:

3. 查看系统进程

在Linux上,使用ps -l命令可以查看当前正在运行的进程列表,并提供关于这些进程的详细信息:

在这里插入图片描述
我们很容易注意到其中的几个重要信息,有下:
UID : 代表执行者的身份
PID : 代表这个进程的代号(进程标识符)
PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的代号/PID
PRI :代表这个进程可被执行的优先级,其值越小越早被执行
NI :代表这个进程的nice值,是进程优先级的修正数据

那这里我们重点要来谈一谈PRI和NI

4. PRI and NI

PRI:

PRI即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,也还是比较好理解的,此值越小进程的优先级别越高

NI(NICE):

nice值,表示进程可被执行的优先级的修正数据
PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice

这样:

当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行
所以,调整进程优先级,在Linux下,通常就是调整进程nice值
nice其取值范围是-20至19,一共40个级别

5. top命令修改已存在进程的nice值

那下面我们就来演示一下,如何修改进程优先级

我们来写这样一个代码:

在这里插入图片描述
死循环打印.,每次printf之后休眠一秒。
这里的fflush函数我们之前进度条那篇文章讲过,这里就不再解释了
然后我们执行这个程序:
在这里插入图片描述
在这里插入图片描述
它就每隔一秒打印一个点。

那这时:

让这个进程跑起来,然后我们执行ps -al
a选项: 显示终端上的所有进程,包括其他用户的进程。
在这里插入图片描述
然后我们就能看到我们的这个myproc进程,它的PRI是80,NI是0

那如果我现在想修改它的优先级,怎么做呢?

这里用到的命令——top
输入一个top,回车
在这里插入图片描述
然后输入r(renice)
在这里插入图片描述
然后,你要修改那个进程的NICE值,就输入谁的PID,这里myproc的PID是20796
在这里插入图片描述
然后,再输入要修改的值,那我这里输入一个-20
在这里插入图片描述
但是我们看到这里显示请求被拒绝了。
怎么回事呢?

修改 NI 值时有几个注意事项:

NI 范围是 -20~19。
普通用户调整 NI 值的范围是 0~19,而且只能调整自己的进程。
普通用户只能调高 NI 值,而不能降低。如原本 NI 值为 0,则只能调整为大于 0。
只有 root 用户才能设定进程 NI 值为负值,而且可以调整任何用户的进程。

所以怎么办呢?

我们可以切换成root;或者可以使用sudo提升top命令的权限
所以我们这次输入sudo top
然后同样的操作
在这里插入图片描述
这次就成功了。
当然还有一点就是上面说NI 范围是 -20~19。那如果我们设置的时候超出了这个范围,可以吗?
🆗,你输入的值可以超出这个范围比如-30,但是最终的结果还是按-20。不会超过这个范围。

我们再来是一个,我们NICE给个正值,让PRI变大看看:

在这里插入图片描述
我们给个100,那PRI真的会+100嘛,当然不行,它超过范围[-20,19]了,所以真实应该是19。
那按照上面说的PRI(new)=PRI(old)+nice
上次我们修改之后PRI是60,那60+19应该是79

我们看看是不是79:

在这里插入图片描述
欸,怎么回事,不是79,而是99。

为什么呢?

PRI(new)=PRI(old)+nice
公式确实是这样的,但是这个PRI(old)它的值,一直都是80,虽然上一次我们修改之后它的PRI是60。
但是这个PRI(old)不受影响,它一直都是80。

6. 其他概念

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

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

并行:多个进程在多个CPU下分别,同时进行运行,这称之为并行

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

burp靶场--访问控制【越权】

【Burp系列】超全越权漏洞实验总结 https://portswigger.net/web-security/access-control/lab-unprotected-admin-functionality 1. 访问控制【越权】 https://portswigger.net/web-security/access-control#what-is-access-control ### 什么是访问控制: 访问控…

php基础学习之常量

php常量的基本概念 常量是在程序运行中的一种不可改变的量(数据),常量一旦定义,通常不可改变(用户级别)。 php常量的定义形式 使用define函数:define("常量名字", 常量值);使用cons…

Mac NTFS 磁盘读写工具选哪个好?Tuxera 还是 Paragon?

在使用 Mac 电脑时,我们经常需要读写 NTFS 格式的硬盘或 U 盘。然而,由于 Mac 系统不支持 NTFS 格式的读写,因此我们需要借助第三方工具来实现这个功能。而在市场上,Tuxera 和 Paragon 是两款备受推崇的 Mac NTFS 磁盘读写工具。那…

GSP专版软件系统(医疗器械进销存)

产品概述 软件完全符合药监局GSP认证要求,可订制其它平台的数据对接; 业务流程清晰,操作简单合理,软件速度非常快; 完善的序列号(UDI)管理,并与整个系统融合在一起; 财务账和业务账完美结合; 可自定义的界面、布局管理;灵活的打印样式设计; 可…

有关软件测试的,任何时间都可以,软件测试主要服务项目:测试用例 报告 计划

有关软件测试的,任何时间都可以,软件测试主要服务项目: 1. 测试用例 2. 测试报告 3. 测试计划 4. 白盒测试 5. 黑盒测试 6. 接口测试 7.自动…

Vuex的基础使用

在使用之前要先了解Vuex的组成结构,跟对应的使用关系。 在上图的结构图中可以看到四个组成部分,首先是Components(组件)、Actions(行动)、Mutations(变化)、state(状态/数…

Mysql运维篇(三) MySQL数据库分库分表方案

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人,如有侵权请留言,我及时删除。 一、前言 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数…

【MySQL进阶】SQL优化

文章目录 SQL 优化主键优化数据组织方式页分裂页合并主键设计原则 insert优化order by优化group by优化limit优化count优化 SQL 优化 主键优化 数据组织方式 在InnoDB存储引擎中,表数据都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表 在In…

【5G 接口协议】N2接口协议NGAP(NG Application Protocol)介绍

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

PIG框架学习3——Redisson 实现业务接口幂等

零、前言 ​ 业务接口幂等问题是在开发中遇到的,如果对业务接口代码不进行幂等控制,并且在前端没有对请求进行限制的情况下,可能会出现多次对接口调用,导致错误异常的发生。就上述情况,对PIGX自带的业务接口幂等实现进…

无法找到mfc100.dll的解决方法分享,如何快速修复mfc100.dll文件

在日常使用电脑时,我们可能会碰到一些系统错误提示,比如“无法找到mfc100.dll”的信息。这种错误通常会阻碍代码的执行或某些应用程序的启动。为了帮助您解决这一问题,本文将深入探讨其成因,并提供几种不同的mfc100.dll解决方案。…

lv14 内核定时器 11

一、时钟中断 硬件有一个时钟装置,该装置每隔一定时间发出一个时钟中断(称为一次时钟嘀嗒-tick),对应的中断处理程序就将全局变量jiffies_64加1 jiffies_64 是一个全局64位整型, jiffies全局变量为其低32位的全局变量&#xff0…

三.Winform使用Webview2加载本地HTML页面

Winform使用Webview2加载本地HTML页面 往期目录创建Demo2界面创建HTML页面在Demo2窗体上添加WebView2和按钮加载HTML查看效果 往期目录 往期相关文章目录 专栏目录 创建Demo2界面 经过前面两小节 一.Winform使用Webview2(Edge浏览器核心) 创建demo(Demo1)实现回车导航到指定…

用立创EDA(专业版)设计原理图

简介 立创EDA,国产的EDA工具。 下载 官方下载链接 下载后,直接一直下一步,最后安装提示免费激活即可。 注意 嘉立创EDA专业版的数据和立创EDA标准版的数据不互通, 常用原理图绘制设置 开发流程 新建工程绘制PCB 文件->新…

【QT+QGIS跨平台编译】之一:【sqlite+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、sqlite3介绍二、文件下载三、文件分析四、pro文件五、编译实践 一、sqlite3介绍 SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的&…

【数据结构】 双链表的基本操作 (C语言版)

目录 一、双链表 1、双链表的定义: 2、双链表表的优缺点: 二、双链表的基本操作算法(C语言) 1、宏定义 2、创建结构体 3、双链表的初始化 4、双链表表插入 5、双链表的查找 6、双链表的取值 7、求双链表长度 8、双链表…

2023年12月 Scratch 图形化(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch图形化等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 观察下列每个圆形中的四个数,找出规律,在括号里填上适当的数?( ) A:9 B:17 C:21 D:5 答案:C 左上角的数=下面两个数的和+右上角的数

142.环形链表 II 、141. 环形链表(附带源码)

目录 一、142问题的分析与解决: 二、怎么做? 三、142代码 四、141代码 一、142问题的分析与解决: 核心:定义快慢指针:slow、fast 思路是当快指针fast进环时,慢指针slow一定没有进环 这个时候就是就变…

flink基本概念

1. Flink关键组件: 这里首先要说明一下“客户端”。其实客户端并不是处理系统的一部分,它只负责作业的提交。具体来说,就是调用程序的 main 方法,将代码转换成“数据流图”(Dataflow Graph),并最终生成作业…

Leetcode刷题笔记题解(C++):LCR 174. 寻找二叉搜索树中的目标节点

思路:二叉搜索树的中序遍历是有序的从大到小的,故得出中序遍历的结果,即要第cnt大的数为倒数第cnt的数 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeN…