【Linux】进程优先级(进程优先级 Linux下优先级 用top命令更改已存在进程的nice 其他概念 进程切换)
文章目录
- 进程优先级
- Linux下优先级
- 用top命令更改已存在进程的nice:
- 其他概念
- 进程切换
进程优先级
我们作为使用者一般不关心优先级,它跟我们的调度器有很大的关系,调度器是为了跟均衡的调度进程。
什么叫做优先级?
优先级和权限是两码事,权限决定的是能还是不能的问题,优先级前提是已经能了,决定的是能的时候先做还是后做的问题。
优先级就是先还是后获得某种资源的能力,先获得优先级高。
为什么存在优先级?
因为资源太少了。系统可能存在几十个进程,但CPU只有一个,系统可能存在十几二十几个进程都要访问网卡,但是网卡只有一个。所以在任何系统里硬件资源一定是少数,软件资源要用硬件资源的跟多,所以要争,即确认优先级,排队。
Linux下优先级
Linux优先级的特点:
优先级本质就是PCB里面的一个整数数字(也可能是几个),在Linux中是用两个整数来确定优先级的,这两个整数叫PRI和NI。
首先写一个进程:

用ps -la就可以查到我这个用户所能查到的指令

Linux支持进程运行中,进行优先级调整,调整的策略就是更改nice完成的。
我们可以看到Linux下的优先级是80,那么它一般的范围是多少呢?优先级受nice值的影响,换句话说nice值的范围决定最终优先级的范围。
所以我们运行一个进程,然后去调整它的优先级,下面试着调一下:
用top命令更改已存在进程的nice:
先改一下代码,并运行,


第一步先top,

然后输入r,r就是rnice的意思,rnice就是重新设置,默认的进程的pid就是29788 ,我要改的是21837,

所以就输入21837,

回车后发生改变:

就变成了 Renice PID 21837 to value,所以我们此时就相当于调整了nice值,一般在优先级当中,优先级的PRI数字越小,代表优先级程度越高。
此时给nice值改成 -100:


设置的时候,调优先级本来就会影响调度器的效率,所以在设置的时候可能要进行权限的设置。所以我们sudo top:
再去操作,Renice PID 21837 to value -100,然后查看进程优先级:

PRI优先级变成了60,优先级被调高了。
我们继续操作:Renice PID 21837 to value 100

此时nice值变成了19。得到下结论:nice的范围
nice [-20,19]
所以我们的nice值有上下限。
继续操作:Renice PID 21837 to value 100

PRI的优先级为89,如果是按照 最终优先级 = 老的优先级 + nice就发现出现了问题,按理优先级应该为 99 + 19 ,但是结果是89,那么就得出另一个结论:每一次设置的时候,老的优先级都是从80开始的。这样就更好的限制了最终优先级一定在 [80-20, 80+19] ,不会出现奇怪的情况。
其他概念
竞争性:资源有限必须确定优先级。
独立性:多进程运行,多进程运行期间互不干扰,各进程独享自己的资源。
修改代码:

刚开始子进程肯定是在跑的,跑一会就退了,

发现子进程退出了, 变僵尸了,但是父进程还在跑,这就证明进程具有独立性。代价就是花费跟多的资源。
并行:
对我们来讲,我们的笔记本一般就一个CPU,不考虑多核,当我们只有一个CPU的时候,任何时刻我们只能有一个进程正在运行。有的大的云服务器,双CPU,那么意味着它在任何一个时刻,它可以有两个进程同时运行,这种同时在运行的进程我们称为并行。
并发:

那我们发现我们计算机好像有多个进程在跑,只有一个CPU的时候,这个进程不是在CPU跑完了才能被从CPU拿下来,当代计算机采用的是时间片轮转的策略,也就是说,我们不管进程未来执行完花多少时间,我们只给这一次10ms的时间让进程占有CPU,那么时间到了,进程就必须从CPU剥离下来,要么等吧,要么就去进程队列尾部重新排队。多进程在同一个CPU下我们采用进程不断切换的方式,那么就可以让一个系统内的一个单CPU的计算机,采用进程切换的方式在一个时间段内,同时让多个进程代码可以推进的行为叫做并发。
进程切换
进程在切换的时候,可以让多个代码同时推进,那么如何切换呢?
一个CPU内部存在大量的寄存器,虽然寄存器很多,但是只有一套硬件寄存器,这些寄存器里有用户可见和用户不可见的(状态寄存器、权限寄存器),当计算机调度某个进程的时候,CPU把这个进程的PCB的地址加载进寄存器,CPU里的寄存器就能找到进程的PCB也就能找到代码和数据。pc/eip (指令计数器)是一个关键的寄存器。对我们来讲CPU一直做着三件事情:1.取指令 2.分型指令 3.执行指令,这里的指令就是我们代码中的指令,所以eip中就保存着当前正在执行指令的下一条指令的地址,相当于CPU里面有一个专门用来标识下一次从当前进程什么位置去读去对应代码或指令的寄存器。读进去之后会参与计算,计算的时候也有一些寄存器参与计算(eb、ec、ed、ex),当我们的进程在运行的时候一定会产生非常多的临时数据,这份数据属于当前进程。
CPU内部虽然只有一套寄存器硬件,但是,寄存器里面保存的数据,是属于当前进程的。
寄存器硬件 != 寄存器内的数据

进程在运行的时候占有CPU,但是进程不是一直要占有到进程结束。例如:while(1)。进程在运行的时候都有自己的时间片。因为进程有时间片,所以每个进程在单CPU上跑的时候,有可能出现进程没跑完就被拿下去,当一个进程没跑完被拿下去了,肯定要考虑下次被拿回来。
举个在校生当兵的例子:
离开学校,保留学籍,上下文保护
回到学校,回复血迹,上下文恢复
为什么要保留和恢复?
保留的手段,恢复是目的。所以,完成保留和恢复,就相当于进程完成了一次切换。学校就是CPU,我就是进程,那么部队就相当于某种等待队列,所以当进程从CPU被剥离的时候,首先要做的就是保留CPU的内寄存器的数据,注意不是寄存器,而是寄存器里的数据。
进程在切换的时候要进行进程的上下文保护(CPU的内寄存器的数据),当进程在恢复运行的时候,要进行上下文的恢复。
在任何时刻,CPU里面的寄存器里面的数据,看起来是在大家都能看到的寄存器上,但是,寄存器内的数据,只属于当前运行的进程!
寄存器被所有进程共享,寄存器内的数据,是每一个进程各自私有的------上下文数据。
相关文章:
【Linux】进程优先级(进程优先级 Linux下优先级 用top命令更改已存在进程的nice 其他概念 进程切换)
文章目录进程优先级Linux下优先级用top命令更改已存在进程的nice:其他概念进程切换进程优先级 我们作为使用者一般不关心优先级,它跟我们的调度器有很大的关系,调度器是为了跟均衡的调度进程。 什么叫做优先级? 优先级和权限是两…...
2016年chatGPT之父Altman与马斯克的深度对话(值得一看)
2016年9月,现今OpenAI CEO,ChatGPT之父,时任创投公司Y Combinator的总裁Sam Altman在特斯拉加州弗里蒙特工厂采访了埃隆马斯克。马斯克阐述了创建OpenAI的初衷,以及就他而言,对于未来最为重要的五件事。这是OpenAI的两…...
基于vscode开发vue3项目的详细步骤教程 3 前端路由vue-router
1、Vue下载安装步骤的详细教程(亲测有效) 1_水w的博客-CSDN博客 2、Vue下载安装步骤的详细教程(亲测有效) 2 安装与创建默认项目_水w的博客-CSDN博客 3、基于vscode开发vue项目的详细步骤教程_水w的博客-CSDN博客 4、基于vscode开发vue项目的详细步骤教程 2 第三方图标库FontAw…...
【C语言】每日刷题 —— 牛客语法篇(5)
前言 大家好,继续更新专栏 c_牛客,不出意外的话每天更新十道题,难度也是从易到难,自己复习的同时也希望能帮助到大家,题目答案会根据我所学到的知识提供最优解。 🏡个人主页:悲伤的猪大肠9的博…...
操作系统(2.1)--进程的描述与控制
目录 一、前驱图和程序执行 1.前驱图 2.程序顺序执行 2.1 程序的顺序执行 2.2 程序顺序执行时的特征 3. 程序并发执行 3.1程序的并发执行 3.2 程序并发执行时的特征 一、前驱图和程序执行 1.前驱图 前趋图:是一个有向无循环图,用于描述进程之间执行的前后…...
JAVA查看动态代理类
JAVA查看代理类 1. 代理类 class 生成 System.setProperty // jdk8及之前的设置System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");// or System.getProperties().put("sun.misc.ProxyGenerator.saveGenerated…...
Chapter2 : SpringBoot配置
尚硅谷SpringBoot顶尖教程 1. 全局配置文件 SpringBoot使用一个全局的配置文件 application.properties 或者 application.yml ,该配置文件放在src/main/resources目录或者类路径/config目录下面, 可以用来修改SpringBoot自动配置的默认值。 yml是YA…...
手撕单链表练习
Topic 1:LeetCode——203. 移除链表元素203. 移除链表元素 - 力扣(LeetCode)移除链表中的数字6操作很简单,我们只需要把2的指向地址修改就好了,原来的指向地址是6现在改为3这个思路是完全正确的,但是在链表…...
Kubuntu安装教程
文章目录Kubuntu介绍下载Kubuntu在VMware虚拟机中安装Kubuntu1. 点击“创建新的虚拟机”2. 选择“自定义(高级)”3. 按照下图所示进行设置设置网络4. 点击“自定义硬件”5. 开启虚拟机6. 进入安装界面,选择中文,之后点击“安装Kub…...
[蓝桥杯] 树状数组与线段树问题(C/C++)
文章目录 一、动态求连续区间和 1、1 题目描述 1、2 题解关键思路与解答 二、数星星 2、1 题目描述 2、2 题解关键思路与解答 三、数列区间最大值 3、1 题目描述 3、2 题解关键思路与解答 标题:树状数组与线段树问题 作者:Ggggggtm 寄语:与其…...
Matlab-Loma Prieta 地震分析
此示例说明如何将带时间戳的地震数据存储在时间表中以及如何使用时间表函数来分析和可视化数据。 加载地震数据 示例文件quake.mat包含 1989 年 10 月 17 日圣克鲁斯山脉 Loma Prieta 地震的 200 Hz 数据。这些数据由加州大学圣克鲁斯分校查尔斯F里希特地震实验室的 Joel Yelli…...
Spring Boot全局异常处理
使用注解方式处理全局异常使用 ControllerAdvice (RestControllerAdvice) 配合 ExceptionHandler适用于返回数据的请求(一般是RESTful接口规范下的JSON报文)package com.example.exception;import org.slf4j.Logger; import org.s…...
websocket每隔5秒给服务端send一次信息
websocket轮询每隔5秒给服务端send一次信息,主要功能点如下:socket 采用了定时器 setInterval() 需要清除定时器否则会报错监听了突然关闭浏览器窗口,destroyed里面直接监听 window.removeEventListener("beforeu…...
2023年中职网络安全——SQL注入测试(PL)解析
SQL注入测试(PL) 任务环境说明: 服务器场景:Server2312服务器场景操作系统:未知(关闭链接)已知靶机存在网站系统,使用Nmap工具扫描靶机端口,并将网站服务的端口号作为Flag(形式:Flag字符串)值提交。访问网站/admin/pinglun.asp页面,此页面存在SQL注入漏洞,使用排…...
利用蜜罐捕捉攻击实验(31)
预备知识 1、蜜罐的含义和作用 蜜罐(Honeypot)是一种在互联网上运行的计算机系统。它是专门为吸引并诱骗那些试图非法闯入他人计算机系统的人(如电脑黑客)而设计的,蜜罐系统是一个包含漏洞的诱骗系统,它通过模拟一个或多个易受攻击的主机ÿ…...
PyTorch深度学习实战 | 自然语言处理与强化学习
PyTorch是当前主流深度学习框架之一,其设计追求最少的封装、最直观的设计,其简洁优美的特性使得PyTorch代码更易理解,对新手非常友好。本文主要介绍深度学习领域中自然语言处理与强化学习部分。自然语言区别于计算机所使用的机器语言和程序语…...
测牛学堂:接口测试基础理论和工具的使用
接口测试流程总结 1 需求分析,看产品经理的需求文档 2 接口文档解析,开发编写的api接口文档 3 设计测试用例 4脚本开发 5 执行及缺陷跟踪 6 生成测试报告 7接口自动化持续集成 测试解析接口文档 接口文档,又称为api文档,是由后…...
定长内存池的实现
解决的是固定大小的内存申请释放需求: 性能达到极致不考虑内存碎片问题(统一使用自由链表管理还回来的空间) 为了避免命名污染,不要直接using namespace std;只展开常用的。 #include <iostream> using std::cout; using std::endl;申请空间时有…...
三更草堂springSecurity的学习
源码地址:学习springSecurity (gitee.com) git:https://gitee.com/misszyg/spring-security.git 一,认证流程 1,经过UsernamePasswordAuthenticationFilter (1)传入了用户的账号,密码 源码&a…...
【C语言】指针的深度理解(一)
前言 我们已经了解了指针的概念,一是指针变量是用来存放地址的,每个地址都对应着唯一的内存空间。二是指针的大小是固定的4或8个字节(取决于操作系统,32位的占4个字节,64位的占8个字节)。三是指针是有类型…...
【算法通关】递归:汉诺塔、合并链表、反转链表、两两交换、快速幂全解
文章目录1. 汉诺塔问题2. 合并两个有序链表3. 反转链表4. 两两交换链表中的节点5. 快速幂1. 汉诺塔问题 题目链接:汉诺塔问题 题目描述: 题解思路:递归 将 n 个盘子从 A 柱移到 C 柱(以 A 为起点、C 为目标、B 为辅助ÿ…...
Ostrakon-VL-8B模型压缩实践:在有限显存下的部署与推理
Ostrakon-VL-8B模型压缩实践:在有限显存下的部署与推理 你是不是也遇到过这样的情况:好不容易找到一个功能强大的视觉语言大模型,比如最近挺火的Ostrakon-VL-8B,结果一看显存要求,直接傻眼了——动辄需要几十个G的显存…...
SDMatte透明PNG元数据规范:EXIF/IPTC嵌入、版权信息自动写入功能
SDMatte透明PNG元数据规范:EXIF/IPTC嵌入、版权信息自动写入功能 1. 产品概述 SDMatte 是一款面向高质量图像抠图场景的 AI 模型,特别适合处理主体分离、透明物体提取、边缘精修、商品图去背景等任务。该模型对玻璃、薄纱、羽毛、叶片等边缘细节复杂或…...
SEO_10个简单有效的SEO技巧,快速提升网站排名
SEO:10个简单有效的SEO技巧,快速提升网站排名 在当今互联网时代,网站的排名直接关系到它的流量和盈利能力。SEO(搜索引擎优化)技巧就是为了帮助网站在搜索引擎中获得更高的排名。本文将分享十个简单有效的SEO技巧,帮助…...
单阶段检测的王者:YOLO核心技术解析与多场景应用实战指南
导读:在计算机视觉的浩瀚星空中,YOLO (You Only Look Once) 无疑是最耀眼的那颗星。自2015年横空出世以来,它凭借“单阶段检测”的独特哲学,将速度与精度完美统一,彻底终结了Two-Stage算法在实时领域的统治地位。站在2…...
从技术到生态:FunASR如何构建开源语音识别新范式
从技术到生态:FunASR如何构建开源语音识别新范式 FunASR是一个端到端语音识别工具包,提供了丰富的预训练模型和便捷的开发工具,帮助开发者快速构建语音识别应用。本文将深入探讨FunASR的技术架构、核心功能、应用场景以及生态系统࿰…...
工业相机图像采集处理:从 RAW 数据到 AI 可读图像,附basler相机 C#实战代码
工业相机图像采集处理:从 RAW 数据到 AI 可读图像,附basler相机 C#实战代码前言: 做工业视觉的兄弟们都遇到过这种场景: 用 Basler Pylon SDK 自带的 Converter 转图,代码是简洁了,但一上高帧率(…...
政务金融AI获客合规难?矩阵跃动小陌GEO私有化部署,兼顾安全与效率
在数字经济与人工智能深度融合的2026年,AI已成为政务金融领域数字化转型的核心驱动力,尤其在获客场景中,AI技术能够实现精准触达、高效转化,大幅降低传统获客模式的人力与时间成本。但政务金融领域的特殊性的决定了其AI应用不能单…...
ChatTTS 本地部署性能优化实战:从生成缓慢到高效推理的解决方案
最近在本地部署 ChatTTS 进行语音合成时,发现生成速度慢得让人有点抓狂。一段几秒钟的音频,等待时间却要十几秒甚至更长,这严重影响了交互体验和批量处理效率。于是,我花了一些时间深入研究,尝试了多种优化手段&#x…...
基于云平台的智能客服系统实战:架构设计与性能优化指南
最近在负责一个面向多租户的智能客服项目,从零到一踩了不少坑。传统单体架构的客服系统,一到业务高峰期就卡顿、超时,扩容更是噩梦。经过一番折腾,我们最终基于云平台构建了一套相对稳定、可扩展的解决方案。今天就把整个架构设计…...
