进程优先级
基本概念
- cpu资源分配的先后顺序,就是指进程的优先权(priority)。
- 优先权⾼的进程有优先执⾏权利。配置进程优先权对多任务环境的linux很有⽤,可以改善系统性能;
- 还可以把进程运⾏到指定的CPU上,这样⼀来,把不重要的进程安排到某个CPU,可以⼤大改善系统整体性能。
优先级是先后问题,权限是是否能得到的问题。
进程的优先级是task_struct内的属性,是一个整型变量,值越低,表明优先级越高,反之则越低。
我们在这为下一篇进程的切换和调度铺垫一下,我们当代Linux或者大部分我们所用的操作系统,这些操作系统都叫做基于时间片的分时操作系统。我们先抛出来时间片的概念,在我们当代计算机里面,我们的每一个进程都分有时间片:
-
定义:时间片是操作系统分配给每个进程的一段CPU使用时间。当一个进程的CPU时间用完时,它会被挂起,操作系统会将CPU分配给另一个进程。
-
目的:确保所有进程都能公平地获得CPU时间,避免某个进程长时间占用CPU,导致其他进程无法执行。
考虑公平性,优先级未来可能变换,但是变化幅度太大。
在基于时间片的分时操作系统中,优先级的变化是动态的,但变化幅度需要谨慎控制以确保系统的稳定性和公平性。如果优先级变化过大,可能会导致优先级低的进程长时间得不到CPU资源的分配,进而导致进程饥饿。因此,系统设计时需要平衡优先级的变化幅度,以避免对系统性能产生负面影响。动态优先级调度算法通过动态调整进程的优先级,能够更灵活地满足不同进程的需求,提高系统整体性能和任务处理效率。同时,调度器的决策过程往往基于当前所有进程的优先级来进行,选择优先级最高的进程分配CPU时间。当多个进程优先级相同时,则可以采用其他调度策略,如时间片轮转或随机选择。动态优先权调度算法的效率在很大程度上取决于其数学模型,模型需要平衡系统资源的利用和进程的响应时间。
查看系统进程
在linux或者unix系统中,⽤:
ps -al | head -1 && ps -al | grep mycmd | grep -v grep
//-a:显示全部
//-l:查看优先级
该命令则会类似输出以下⼏个内容:
UID(User ID)
-
定义:代表执行进程的用户身份。
-
作用:用于区分不同用户启动的进程,是进程安全和权限控制的基础。
-
示例:在Linux里面,识别用户不是通过用户名,而是通过UID,如果UID为1000,通常表示该进程是由用户ID为1000的用户启动的。
可以使用:
ls -ln
显示用户ID:
比如说我们的文件在创建的时候就写入了文件创建者的ID(UID),然后我们进程在进行启动的时候,进程自己也会将自己的UID保存起来,表明这个进程是谁启动的。
所以:系统怎么知道我访问文件的时候,是拥有者,所属组,还是other?
对于权限,在我们访问文件的时候,我们有时候是拥有者,有时候是所属组,有时候是other,我们是可以直接'' ll ''看见的,但是系统是只认数字的,而且当我们要touch,cat,vim等,访问某些文件的时候,本质就是进程在访问文件,我们说使用的指令访问就是进程在访问文件,那我们的文件又是怎么知道访问他的进程是拥有者/所属组/other呢?因为这个进程在启动时会把自己的UID(谁启动的他,假设是我),这个文件如果是之前我创建的,这个文件会记录下来是我创建的他,那么,我们一个进程,将来的时候拿着他的UID和文件所对应的UID作对比,相等的话是拥有者,不相等查下一个,相等的话就是所属组,再不行等的话就是other。
也就是说,Linux系统中,访问任何资源,都是进程访问,进程就代表用户
PRI(Priority)
-
定义:代表进程可被执行的优先级。(默认是80)
-
作用:决定进程被CPU调度执行的顺序,PRI值越小,优先级越高,越先被执行。
-
示例:PRI为10的进程比PRI为20的进程有更高的优先级。
NI(Nice)
-
定义:代表进程的nice值,是进程优先级的修正数值。
-
作用:通过调整nice值,可以影响进程的PRI值,从而影响进程的执行优先级。nice值越低(越负),优先级越高。
-
示例:如果一个进程的nice值为-5,那么它的PRI值会相应降低,从而提高其优先级。
我们为什么还要有一个NI来进行对优先级的间接调整,这是我们进程的调度算法才会说到,我们先直接输出结论:
进程的真实优先级PRI=80(默认PRI)+NI;(一定要注意,第一次NI先改为10,PRI为90,我们第二次将NI改为-10,结果并不是80,是70)(以80为改变点)(这里是一个坑)
因为我们如果每一次都基于上次的优先级进行调整,那么我们就还需要改之前查一下当前的PRI是多少,是比较麻烦的。
我们并不是很喜欢一直手动变化进程优先级,他是动态变化的,改得太多可能会影响进程间的调度平衡。
我们可以手动改变进程优先级:
⽤top命令更改已存在进程的nice:
- top
- 进⼊top后按“r”‒>输⼊进程PID‒>输⼊nice值
注意:
- 其他调整优先级的命令:nice,renice
- 系统函数:
优先级极值问题
在 Linux 系统中,进程的优先级(Priority)默认值为 80,而 nice 值的范围是 [-20, 19]。因此,通过调整 nice 值,进程的优先级范围可以计算如下:
-
最小优先级:当 nice 值为 -20 时,优先级为 80 + (-20) = 60。
-
最大优先级:当 nice 值为 19 时,优先级为 80 + 19 = 99。
因此,Linux 系统中进程优先级的极值范围是 [60, 99]。
优先级极值的调度影响:
-
优先级过低(接近99):优先级过低的进程可能会长时间得不到 CPU 资源的分配,导致进程饥饿。为了避免这种情况,操作系统通常会采用老化(Aging)机制,即随着时间的推移逐渐提高进程的优先级。
-
优先级过高(接近60):优先级过高的进程可能会过度占用 CPU 资源,影响系统的公平性和其他进程的响应时间。
优先级调整的限制:
为了避免优先级变化过大导致系统调度的不公平性或饥饿问题,操作系统通常会限制优先级的调整幅度。例如:
-
nice 值的范围:nice 值的范围被严格限制在 [-20, 19],以确保优先级的变化不会过于剧烈。
-
动态调整机制:操作系统会根据进程的行为(如 CPU 使用时间、等待时间等)动态调整优先级,但调整幅度会受到限制。
在基于时间片的分时操作系统中,优先级极值的合理设置和调整对于系统的公平性和性能至关重要。通过限制 nice 值的范围和引入动态调整机制,操作系统可以有效避免优先级过高或过低带来的问题,同时确保所有进程都能获得合理的 CPU 时间。
补充概念:竞争、独立、并行、并发
竞争性(Concurrency)
-
定义:在多任务操作系统中,多个进程可能需要访问同一资源(如CPU、内存、文件等)。由于资源有限,进程之间会相互竞争这些资源。
-
目的:通过优先级机制,可以更合理地分配资源,确保重要任务优先执行,从而提高系统的整体效率和响应速度。
-
例子:在只有一个打印机的办公室中,多个用户需要打印文件,打印机资源就是竞争对象。
独立性(Independence)
-
定义:每个进程都是一个独立的执行单元,它们在运行时互不干扰,每个进程有自己的地址空间和资源。
-
目的:独立性确保了进程的安全性和稳定性,即使一个进程出现问题,也不会影响到其他进程的运行。
-
例子:多个用户在电脑上运行不同的应用程序,每个应用程序都是一个独立的进程,它们之间互不干扰。
并行(Parallelism)
-
定义:多个进程在同一时间内在不同的CPU上同时执行。
-
目的:通过并行处理,可以显著提高计算效率和处理速度,特别是在多核CPU的系统中。
-
例子:在多核处理器的电脑上,多个计算密集型任务(如视频编码、科学计算等)可以同时在不同的CPU核心上运行,从而加快处理速度。
并发(Concurrency)
-
定义:多个进程在同一时间内在同一个CPU上通过时间片轮转的方式交替执行。
-
目的:通过并发执行,可以在单个CPU上实现多个任务的推进,提高CPU的利用率和系统的响应速度。
-
例子:在单核处理器的电脑上,操作系统通过时间片轮转的方式,让多个应用程序交替执行,从而给用户一种多任务同时运行的感觉。
并行(Parallel)与并发(Concurrency)的区别
并行(Parallel)
-
定义:并行是指多个进程在多个处理器(或核心)上同时执行。每个进程都有自己独立的执行路径,它们之间没有直接的交互,但可以同时进行。
-
特点:
-
需要多个处理器或核心。
-
进程之间没有直接的交互。
-
可以显著提高处理速度和效率。
-
-
例子:假设有两个厨师(进程)和两个烤箱(CPU核心)。两个厨师可以同时在两个烤箱中烤面包,这就是并行处理。
并发(Concurrency)
-
定义:并发是指多个进程在单个处理器上通过时间片轮转的方式交替执行,使得多个进程看起来像是同时进行的。
-
特点:
-
只需要一个处理器或核心。
-
进程之间可能需要共享资源,因此需要同步机制。
-
可以提高单个处理器的利用率,但处理速度受限于单个处理器的能力。
-
-
例子:假设只有一个厨师(进程)和一个烤箱(CPU核心)。厨师需要烤两种面包,他可以先烤第一种面包5分钟,然后取出,再烤第二种面包5分钟,如此交替进行。虽然每次只有一个面包在烤,但通过交替执行,两种面包都可以烤好,这就是并发执行。
图示说明
为了更直观地理解并行和并发的区别,可以参考以下图示:
并行(Parallel)
进程1 进程2| || || || || || |+-------+-------+时间
在并行处理中,进程1和进程2同时在不同的CPU上运行,它们在同一时间间隔内并行执行。
并发(Concurrency)
进程1 进程2| || | || | |+---+---+时间
在并发执行中,进程1和进程2在同一个CPU上通过时间片轮转的方式交替执行,虽然它们看起来像是同时运行,但实际上是在不同时间片上交替执行的。
咖啡店比喻
为了更形象地解释并行和并发,我们可以用咖啡店的比喻:
-
并行(Parallel):想象有两个咖啡师和两台咖啡机。两个顾客(进程)可以同时点咖啡,两个咖啡师分别在两台咖啡机上同时制作咖啡。这就是并行,每个顾客的咖啡可以同时开始制作。
-
并发(Concurrency):现在只有一个咖啡师和一台咖啡机。两个顾客(进程)点咖啡,咖啡师需要先为一个顾客制作咖啡,完成后再为另一个顾客制作。虽然每次只有一个顾客的咖啡在制作,但通过交替为两个顾客服务,两个顾客的咖啡都可以完成。这就是并发。
相关文章:

进程优先级
基本概念 cpu资源分配的先后顺序,就是指进程的优先权(priority)。 优先权⾼的进程有优先执⾏权利。配置进程优先权对多任务环境的linux很有⽤,可以改善系统性能;还可以把进程运⾏到指定的CPU上,这样⼀来&…...

c语言(转义字符)
前言: 内容: 然后记一下转义字符 \? 在书写连续多个问号时使用,防止他们被解析成三字母词 \ 用于表示字符常量 \\ 用于表示一个反斜杠,防止他被解析为一个转义序列符 \n 换行 \r …...

easyexcel读取写入excel easyexceldemo
1.新建springboot项目 2.添加pom依赖 <name>excel</name> <description>excelspringboot例子</description><parent> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId&…...

【人工智能数学基础篇】——深入详解矩阵分解:奇异值分解(SVD)与主成分分析(PCA)在数据降维与特征提取中的应用
目录 1. 引言 2. 矩阵分解概述 2.1 矩阵分解的意义 3. 奇异值分解(SVD) 3.1 定义与数学基础 3.2 SVD 的性质 3.3 SVD 在数据降维中的应用 3.4 示例代码:使用 SVD 进行图像压缩 3.5 结果分析 4. 主成分分析(PCA࿰…...

ThreeJS示例教程200+【目录】
Three.js 是一个强大的 JavaScript 库,旨在简化在网页上创建和展示3D图形的过程。它基于 WebGL 技术,但提供了比直接使用 WebGL 更易于使用的API,使得开发者无需深入了解 WebGL 的复杂细节就能创建出高质量的3D内容。 由于目前内容还不多,下面的内容暂时做一个占位。 文章目…...

DC-DC稳压电源——实战(基于Ti5450芯片)基础知识篇(1)
一:基础知识-耦合 1)去耦电容 (1)耦合与去耦 耦合:系统内部的各个部分之间存在相互依赖、相互影响、相互制约的情况。用人话说就是不同部分之间的相互影响。 去耦:自然就是消除不同部分之间的影响了。 &…...

pyrender 渲染mesh
目录 render_meshes函数 调用函数 render_meshes函数 def overlay_human_meshes(humans, K, model, img_pil, unique_colorFalse):# Color of humans seen in the image._color [color[0] for _ in range(len(humans))] if unique_color else color# Get focal and princpt …...

防火墙安全策略
目录 一.拓扑信息 二.需求分析 三.命令行详细配置信息 1.配置IP 2.交换机配置 3.修改安全区域 4.安全策略 四.web界面详细配置 1.配置IP和设置安全区域 2.交换机配置 3.安全策略 五.测试 一.拓扑信息 二.需求分析 1.VLAN 2属于办公区域;VLAN 3属于生…...

selenium clear()方法清除文本框内容
在使用Selenium进行Web自动化测试时,清除文本框内容是一个常见的需求。这可以通过多种方式实现,取决于你使用的是哪种编程语言(如Python、Java等)以及你的具体需求。以下是一些常见的方法: 1. 使用clear()方法 clear…...

(回溯分割)leetcode93 复原IP地址
#include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; //卡尔的图不是按照程序执行过程而是直接画程序会执行的过程 // 实际执行是:n个字符,递推n1后(叶子节点ÿ…...

高性能队列 Disruptor 在 IM 系统中的实战
高性能队列 Disruptor 在 IM 系统中的实战 前三期我们介绍了Disruptor的典型使用场景和相关高性能原理,本期我介绍一下Disruptor在IM系统用的应用实战,IM系统即社交聊天系统,对实时性的要求非常高,非常符合Disruptor的使用场景。 …...

原生HTML集合
一、表格 1、固定表格 <div class"tablebox"><div class"table-container"><table id"myTable" border"0" cellspacing"0" cellpadding"0"><thead><tr></tr></thead>…...

ES6 简单练习笔记--变量申明
一、ES5 变量定义 1.在全局作用域中 this 其实就是window对象 <script>console.log(window this) </script>输出结果: true 2.在全局作用域中用var定义一个变量其实就相当于在window上定义了一个属性 例如: var name "孙悟空" 其实就相当于执行了 win…...

2025.1.21——六、BUU XSS COURSE 1
题目来源:buuctf BUU XSS COURSE 1 一、打开靶机,整理信息 有吐槽和登陆两个尝试点,题目名称提示是XSS漏洞 XSS(Cross-Site Scripting)漏洞 1.定义:跨站脚本攻击,是一种常见的 Web 安全漏洞。攻…...

Linux - 五种常见I/O模型
I/O操作 (输入/输出操作, Input/Output) 是指计算机与外部设备就行数据交互的过程. 什么是外部设备: 如键盘, 鼠标, 硬盘, 网卡等. 五种常见的 I/O 模型: 阻塞 I/O非阻塞 I/O信号驱动 I/OI/O 多路复用异步 I/O 阻塞 I/O 阻塞 I/O 的特点: 当用户发起 I/O 请求后, 进程/线程就…...

【负载均衡式在线OJ】加载题目信息(文件版)
目录 如何读取文件 -- 常见流程 代码 如何读取文件 -- 常见流程 在C中使用 std::ifstream来打开文件流是一个常见的操作,用于创建一个输入文件流,并尝试打开名为 question_list的文件。if (!in.is_open()):检查文件是否成功打开。如果文件未…...

“上门按摩” 小程序开发项目:基于 SOP 的全流程管理
在竞争激烈的生活服务市场,“上门按摩” 服务需求日益增长。为满足这一需求,我们启动了 O2O 模式的 “上门按摩” 小程序开发项目,该项目涵盖客户端、系统管理端、技师端。以下将通过各类 SOP 对项目进行全面管理,确保项目顺利推进。 一、项目启动 SOP:5W2H 分析法 What(…...

WPF1-从最简单的xaml开始
1. 最简单的WPF应用 1.1. App.config1.2. App.xaml 和 App.xaml.cs1.3. MainWindow.xaml 和 MainWindow.xaml.cs 2. 正式开始分析 2.1. 声明即定义2.2. 命名空间 2.2.1. xaml的Property和Attribute2.2.2. xaml中命名空间2.2.3. partial关键字 学习WPF,肯定要先学…...

2025牛客寒假算法营2
A题 知识点:模拟 打卡。检查给定的七个整数是否仅包含 1,2,3,5,6 即可。为了便于书写,我们可以反过来,检查这七个整数是否不为 4 和 7。 时间 O(1);空间 O(1)。 #include <bits/stdc.h> using namespace std;signed main()…...

编译Android平台使用的FFmpeg库
目录 前言 一、编译环境 二、搭建环境 1.安装MSYS2 2.更新系统包 2.1 打开MSYS2 MinGW 64-bit终端(mingw64.exe) 2.2 更新所有软件包到最新版本 2.3 安装必要的工具和库。 3. 克隆FFmpeg源码 4. 配置编译选项 5. 执行编译 总结 前言 记录学习…...

【C++高并发服务器WebServer】-2:exec函数簇、进程控制
本文目录 一、exec函数簇介绍二、exec函数簇 一、exec函数簇介绍 exec 函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件。 exec函数族的函数执行成功后不会返回&…...

力扣707题(2)——设计链表
#题目 #3,5和6的代码 今天看剩下几个题的代码,1,2,4的代码已经在上篇博客写过了想看的小伙伴移步到: 力扣707题——设计链表-CSDN博客 //第3题头插法 void addAtHead(int val){ //记录头结点ListNode nhead; //新节点的创建,并让它指向原本头结点的后…...

K8S中ingress详解
Ingress介绍 Kubernetes 集群中,服务(Service)是一种抽象,它定义了一种访问 Pod 的方式,无论这些 Pod 如何变化,服务都保持不变。服务可以被映射到一个静态的 IP 地址(ClusterIP)、一…...

SpringBoot打包为JAR包或WAR 包,这两种打包方式在运行时端口将如何采用?又有什么不同?这篇文章将给你解惑
你们好,我是金金金。 前提 SpringBoot打包方式:不是jar就是war包 场景 写这篇文章也是我遇到一个很不理解的点,所以就去研究了一下 场景如下: 这是后端生产配置文件给项目设置的端口,然后我前端写的url是:我就很纳闷,前端写了域名以及后端服务上下文路径,咋没写端口呢,…...

zabbix6.0安装及常用监控配置
文章目录 部署zabbix-serverzabbix监控节点部署解决zabbix中文乱码创建主机组创建模版配置主机与模版关联 监控boot分区监控网卡流量出网卡流量监控进入和出的总流量监控内存监控服务器端口用户自定应监控key值 (监控mysql查询数量)zabbix触发器监控cpu监控入网卡流量 邮件告警…...

SQL-leetcode—1179. 重新格式化部门表
1179. 重新格式化部门表 表 Department: ---------------------- | Column Name | Type | ---------------------- | id | int | | revenue | int | | month | varchar | ---------------------- 在 SQL 中,(id, month) 是表的联合主键。 这个表格有关…...

JavaWeb 学习笔记 XML 和 Json 篇 | 020
今日推荐语 愿你遇见好天气,愿你的征途铺满了星星——圣埃克苏佩里 日期 学习内容 打卡编号2025年01月23日JavaWeb笔记 XML 和 Json 篇020 前言 哈喽,我是菜鸟阿康。 以下是我的学习笔记,既做打卡也做分享,希望对你也有所帮助…...

在Raspbian上,如何获取树莓派的CPU当前频率
本文不用汇编实现,因为我是要用在 Go 里的,Go 并不支持内联汇编,要用汇编比较麻烦。而且项目并不是很在意性能,所以直接用命令获取内核准备好的。 在Raspbian上,CPU 信息存放在/sys/devices/system/cpu/中,…...

网络打印机的搜索与连接(一)
介绍 网络打印机就是可以通过网络连接上的打印机,这类打印机分2种:自身具有互联网接入功能可以分配IP的打印机我们称为网络打印机、另外一种就是被某台电脑连接上去后通过共享的方式共享到网络里面的我们称为共享打印机。现在还有一种可以通过互联网连接…...

LangChain + llamaFactory + Qwen2-7b-VL 构建本地RAG问答系统
单纯仅靠LLM会产生误导性的 “幻觉”,训练数据会过时,处理特定知识时效率不高,缺乏专业领域的深度洞察,同时在推理能力上也有所欠缺。 正是在这样的背景下,检索增强生成技术(Retrieval-Augmented Generati…...