【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]。
  •  进程的调度和切换是操作系统中重要的概念,其中 竞争、独立、并发、并行 这些概念比较常见。

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache Doris 2.1 核心特性 Variant 数据类型技术深度解析

在最新发布的 Apache Doris 2.1 新版本中&#xff0c;我们引入了全新的数据类型 Variant&#xff0c;对半结构化数据分析能力进行了全面增强。无需提前在表结构中定义具体的列&#xff0c;彻底改变了 Doris 过去基于 String、JSONB 等行存类型的存储和查询方式。为了让大家快速…

MATLAB图形绘制

一&#xff0c;二维图像绘制 最基础的二维图形绘制方法&#xff1a;plot -plot命令自动打开一个图形窗口Figure;用直线连接相邻两数据点来绘制图形 -根据图形坐标大小自动缩扩坐标轴&#xff0c;将数据标尺及单位标注自动加到两个坐标轴上&#xff0c;可自定坐标 轴&#x…

group by和min、max函数一起使用

原始数据 查询每科的最高分数 -- 查询每科最高分数 select stuId,classId,stuName,max(score) from student_score group by classId 错误的结果 这个显然不是对的&#xff0c;或者说不是我们想要的结果&#xff0c; 我们想要的结果是 原因是什么呢&#xff1f;我们知道使用…

AtomoVideo:AIGC赋能下的电商视频动效生成

✍&#x1f3fb; 本文作者&#xff1a;凌潼、依竹、桅桔、逾溪 1. 概述 当今电商领域&#xff0c;内容营销的形式正日趋多样化&#xff0c;视频内容以其生动鲜明的视觉体验和迅捷高效的信息传播能力&#xff0c;为商家创造了新的机遇。消费者对视频内容的偏好驱动了视频创意供给…

我的自建博客之旅04之Halo

我的自建博客之旅04之Halo Halo是我无意间发现的一款博客框架,如果你讨厌Hexo,Vuepress等静态框架本地编辑,构建部署等方式,如果你想要一款一次搭建,前台是博客,后台是文章维护,并且支持各种定制化折腾的博客框架,可能Halo会比较适合你。 因为我个人还是比较偏技术,…

C语言 扫雷游戏

写了这么长时间的关于C语言的基础知识&#xff0c;相信大家已经学会了使用C语言书写一些基础的代码&#xff0c;上次还编写了三子棋游戏的代码&#xff0c;这次我将编写一个基础版的扫雷游戏。 首先&#xff0c;创建三个文件&#xff0c;两个源文件&#xff0c;一个头文件&…

【C++】用红黑树模拟实现set、map

目录 前言及准备&#xff1a;一、红黑树接口1.1 begin1.2 end1.3 查找1.4 插入1.5 左单旋和右单旋 二、树形迭代器&#xff08;正向&#xff09;2.1 前置 三、模拟实现set四、模拟实现map 前言及准备&#xff1a; set、map的底层结构是红黑树&#xff0c;它们的函数通过调用红…

微信小程序小白易入门基础教程1

微信小程序 基本结构 页面配置 页面配置 app.json 中的部分配置&#xff0c;也支持对单个页面进行配置&#xff0c;可以在页面对应的 .json 文件来对本页面的表现进行配置。 页面中配置项在当前页面会覆盖 app.json 中相同的配置项&#xff08;样式相关的配置项属于 app.js…

android 怎么自定义view

首先了解view的绘制流程: 所以onmeasure ---测量view onlayout---确定view大小----》所以继承ViewGroup必须要重写onlayout,确定子view 而onDraw----是继承view时候需要操作的。 所以:自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件。 自定义Vi…

一个可商用私有化部署的基于JAVA的chat-gpt网站

目录 介绍一、核心功能1、智能对话2、AI绘画3、知识库4、一键思维导图5、应用广场6、GPTS 二、后台管理功能1、网站自定义2、多账号登录支持3、商品及会员系统4、模型配置5、兑换码生成6、三方商户用户打通 结语 介绍 java语言的私有化部署的商用网站还是比较少的 这里给大家介…

第 126 场 LeetCode 双周赛题解

A 求出加密整数的和 模拟 class Solution { public:int sumOfEncryptedInt(vector<int> &nums) {int res 0;for (auto x: nums) {string s to_string(x);char ch *max_element(s.begin(), s.end());for (auto &c: s)c ch;res stoi(s);}return res;} };B 执行…

【研发日记】Matlab/Simulink技能解锁(五)——Simulink布线技巧

前言 见《【研发日记】Matlab/Simulink技能解锁(一)——在Simulink编辑窗口Debug》 见《【研发日记】Matlab/Simulink技能解锁(二)——在Function编辑窗口Debug》 见《【研发日记】Matlab/Simulink技能解锁(三)——在Stateflow编辑窗口Debug》 见《【研发日记】Matlab/Simulink…

C++作业day6

编程1&#xff1a; 封装一个动物的基类&#xff0c;类中有私有成员&#xff1a;姓名&#xff0c;颜色&#xff0c;指针成员年纪 再封装一个狗这样类&#xff0c;共有继承于动物类&#xff0c;自己拓展的私有成员有&#xff1a;指针成员&#xff1a;腿的个数&#xff08;整型 …

六种GPU虚拟化:除了直通、全虚拟化 (vGPU)还有谁?

在大类上计算虚拟化技术有这3种&#xff1a; 软件模拟、直通独占(如网卡独占、显卡独占)、直通共享&#xff08;如vCPU 、vGPU&#xff09;。但对于显卡GPU而言我总结细化出至少这6种分类&#xff1a; 第一种、软件模拟&#xff08;eg sGPU&#xff09;, 又叫半虚拟化。第二种…

[论文笔记] Gradient Surgery for Multi-Task Learning

【强化学习 137】PCGrad - 知乎 多任务学习(multi task):任务权重、loss均衡、梯度下降那点事 - 知乎 ICLR 2020 rejected submission:Yu T, Kumar S, Gupta A, et al. Gradient surgery for multi-task learning[J]. arXiv preprint arXiv:2001.06782, 2020. mul…

yocto编译测试

源码下载 git clone -b gatesgarth git://git.yoctoproject.org/poky lkmaolkmao-virtual-machine:~/yocto$ git clone -b gatesgarth git://git.yoctoproject.org/poky Cloning into poky... remote: Enumerating objects: 640690, done. remote: Counting objects: 100% (13…

Java的图书管理系统,确实有两把斧子 ! ! !

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

15届蓝桥杯备赛(2)

文章目录 刷题笔记(2)二分查找在排序数组中查找元素的第一个和最后一个位置寻找旋转排序数组中的最小值搜索旋转排序数组 链表反转链表反转链表II 二叉树相同的树对称二叉树平衡二叉树二叉树的右视图验证二叉搜索树二叉树的最近公共祖先二叉搜索树的最近公共祖先二叉树层序遍历…

Qt 图形视图 /基于Qt示例DiagramScene解读图形视图框架

文章目录 概述从帮助文档看示例程序了解程序背景/功能理清程序概要设计 分析图形视图的协同运作机制如何嵌入到普通Widget程序中&#xff1f;形状Item和文本Item的插入和删除&#xff1f;连接线Item与形状Item的如何关联&#xff1f;如何绘制ShapeItem间的箭头线&#xff1f; 下…

干货整理!火石控股创始人吴渔夫的 AI 游戏思维20条

近日&#xff0c;在一场面对面的直播中&#xff0c;自媒体「极新」创始人姜稳与火石控股创始人、奇酷网络董事长吴渔夫进行视频对话中&#xff0c;探讨了AI技术对游戏行业的新机遇和新挑战。 中国网游先锋&#xff0c;火石控股创始人&#xff0c;奇酷网络董事长吴渔夫认为&…