【Linux】进程优先级

前言:

进程优先级是操作系统中的一个关键概念,它直接影响到进程的调度顺序和执行权。了解进程优先级对于优化和提升系统性能至关重要。让我们直接进入今天的主题!

?优先级相关✈️什么是优先级 在日常生活中,我们常常遇到需要排队的情况,比如在公路上等红灯,在医院挂号,或者在食堂吃饭。然而,救护车可以无视红灯,急诊病人可以优先挂号,食堂里的老师可以插队…

这些需要排队的事物可以被视为进程,而像救护车、急诊病人以及食堂的老师等,则是具有优先权的象征。优先权的存在是为了处理更重要的事情。

【Linux】进程优先级 因此,优先级的概念清晰可见:进程通过某种方式(排队)来确定访问资源的先后顺序。

立即进入“豆包AI人工智官网入口”;

立即学习“豆包AI人工智能在线问答入口”;

细心的你可能已经注意到,优先级似乎与我们之前学习的权限概念相似。实际上,优先级和权限是有区别的:权限决定的是能不能的问题,而优先级决定的是先后顺序的问题。

✈️为什么要有优先级 如果食堂的窗口数量远超人数,如果自习室的座位非常多而人却很少,我们就不需要排队。也就是说,当资源充足时,排队是不必要的。

因此,优先级产生的本质是因为资源相对稀缺。

✈️进程的优先级 为了更直观地展示优先级,我们可以运行以下代码:

代码语言:javascript代码运行次数:0运行复制“`javascript

include#include#includeint main(){while(1){printf(“this is a process, pid=%dn”, getpid());sleep(1);}return 0;}

将此程序运行起来变成进程,然后使用以下命令查看进程属性:

代码语言:javascript代码运行次数:0<svg fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6.66666 10.9999L10.6667 7.99992L6.66666 4.99992V10.9999ZM7.99999 1.33325C4.31999 1.33325 1.33333 4.31992 1.33333 7.99992C1.33333 11.6799 4.31999 14.6666 7.99999 14.6666C11.68 14.6666 14.6667 11.6799 14.6667 7.99992C14.6667 4.31992 11.68 1.33325 7.99999 1.33325ZM7.99999 13.3333C5.05999 13.3333 2.66666 10.9399 2.66666 7.99992C2.66666 5.05992 5.05999 2.66659 7.99999 2.66659C10.94 2.66659 13.3333 5.05992 13.3333 7.99992C13.3333 10.9399 10.94 13.3333 7.99999 13.3333Z" fill="currentcolor">运行<svg fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M4.5 15.5V3.5H14.5V15.5H4.5ZM12.5 5.5H6.5V13.5H12.5V5.5ZM9.5 2.5H3.5V12.5H1.5V0.5H11.5V2.5H9.5Z" fill="currentcolor" fill-rule="evenodd">复制javascript ps -la#显示当前用户的所有进程

【Linux】进程优先级 我们可以看到,横着的蓝色框是我们启动的进程,竖着的蓝色框有一栏叫做 PRI 的数值,PRI 就是 priority,优先权的意思。

竖着的蓝色框显示的是优先级,而优先级是数值,所以它一定是 task_struct 结构体中的一个属性:

代码语言:javascript代码运行次数:0运行复制javascriptstruct task_struct{int PRI;//优先级//...}

运行我们编写的程序,查询该进程的权限为80,这表明 Linux 下的进程优先级本质上是数字。

实际上,Linux 下的优先级是可以修改的,修改范围为 [60, 99],且进程的默认优先级值是80。而优先级数字越小,表示该进程的优先级越高!


?调整进程优先级✈️调整优先级 我们已经了解了进程优先级的概念和原因,接下来看看如何操作?

运行上面的程序,打印出进程的pid,然后使用 top 命令进入 Linux 任务管理器:

代码语言:javascript代码运行次数:0<svg fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M6.66666 10.9999L10.6667 7.99992L6.66666 4.99992V10.9999ZM7.99999 1.33325C4.31999 1.33325 1.33333 4.31992 1.33333 7.99992C1.33333 11.6799 4.31999 14.6666 7.99999 14.6666C11.68 14.6666 14.6667 11.6799 14.6667 7.99992C14.6667 4.31992 11.68 1.33325 7.99999 1.33325ZM7.99999 13.3333C5.05999 13.3333 2.66666 10.9399 2.66666 7.99992C2.66666 5.05992 5.05999 2.66659 7.99999 2.66659C10.94 2.66659 13.3333 5.05992 13.3333 7.99992C13.3333 10.9399 10.94 13.3333 7.99999 13.3333Z" fill="currentcolor">运行<svg fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M4.5 15.5V3.5H14.5V15.5H4.5ZM12.5 5.5H6.5V13.5H12.5V5.5ZM9.5 2.5H3.5V12.5H1.5V0.5H11.5V2.5H9.5Z" fill="currentcolor" fill-rule="evenodd">复制```javascripttop#进入任务管理器

【Linux】进程优先级 进入任务管理器后,输入 'r',进入修改进程权限的操作,然后输入进程标识符:

【Linux】进程优先级 接着会出现文字提示:

【Linux】进程优先级 然后输入要修改的值,例如,这里我输入10:

【Linux】进程优先级 此时再使用 ps 查看,会发现进程的 PRI 这一项变为了90,但不仅仅是 PRI 这一栏变了,还有一栏叫做 NI 的值也变了,而且正好是我们输入的数值!

实际上,Linux 系统支持用户调整优先级,但并不是让用户直接修改 pri 值,而是修改 nice 值。nice 值不是优先级,而是优先级的修正数据。

所以真正的优先级应该是:pri = pri(old) + nice;(old 指老的优先级)

因此,我们刚刚修改的并不是优先级,而是 nice 值。

✈️优先级极限测试 但事实果真如此吗?进程的优先级真的只能在 [60,99] 这个范围内移动吗?如果不相信,我们可以进行极值测试:

我们将程序的进程值调到尽可能大:

【Linux】进程优先级【Linux】进程优先级 nice 值变为19,pri 变为99,就是我们给出的最大范围。

如果我们把 nice 值设置为-10:

【Linux】进程优先级【Linux】进程优先级 我们发现,进程的 pri 变为了70,但我们刚才不是刚把进程的优先级调至99吗?

实际上这是因为:pri(old),是指老的优先级,这个优先级永远是80!所以再次调整时,还是从80开始变化。

我们把 nice 值设置为极小值:

【Linux】进程优先级【Linux】进程优先级 进程的 pri 果然为60,所以 nice 值的范围就是 [-20, 19]。

你可能会有疑问,为什么要给进程优先级加上限制范围呢?

为了尽量避免进程饥饿的问题,现在的任何分时操作系统,都是较为公平地进行调度。

?Linux的调度与切换 Linux 调度切换是学习 Linux 系统编程的重要知识,我们提前了解一下:

我们之前提到过,CPU 不会把一个进程全部执行完才切换到下一个进程,而是基于时间片进行轮转执行的。关于进程的调度与切换,有以下几个相关特性:

竞争性:系统进程数量众多,而 CPU 资源只有少量,甚至只有1个,所以进程之间是具有竞争属性的。为了高效完成任务,更合理地竞争相关资源,便有了优先级。如前所述,为了避免竞争饥饿问题,操作系统会合理地给进程分配各种资源。

独立性:多进程运行,需要独享各种资源,多进程运行期间互不干扰。进程的独立性是学习 Linux 系统编程特别重要的一个知识,多个进程在系统里同时运行,但它们互不干扰,一个进程挂了不会影响其他进程,就算是父子进程也是如此。

并行:多个进程在多个 CPU 下分别同时运行,称为并行。如果一台电脑有多个 CPU,并且每个 CPU 下有对应数量的进程分别同时运行,那么就称之为并行。

并发:多个进程在一个 CPU 下采用进程切换的方式,在一段时间之内让多个进程都得以推进,称为并发。并发与并行不同,我们大部分人的电脑其实只有一个 CPU,而进程通常会有多个。为了考虑资源分配等问题,每个进程都有自己的时间片,时间片用完就切换到下一个进程,自己则重新排队,等待再次调度。虽然每次 CPU 执行任务只执行很少的时间片,但对于我们人类来说并看不出来进程是在不断切换的。多个进程在一个 CPU 下采用进程切换的方式,一段时间内让多个进程都能推进任务,称之为并发。

【Linux】进程优先级?✏️总结 在操作系统中,资源总是少数,所以进程需要使用排队的方式来获取资源,而有些重要的进程优先级较高,可以插队。进程的优先级是可调整的,调整范围为:[60, 99],实际上我们调整的是进程的 nice 值,nice 值的范围是 [-20, 19]。进程的调度和切换是操作系统中重要的概念,其中竞争、独立、并发、并行这些概念比较常见。如果这篇文章对你有帮助的话,还望留下一个小小的赞呀~~

以上就是【Linux】进程优先级的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/14612.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月25日 06:58:38
下一篇 2025年11月25日 07:25:09

相关推荐

  • 云闪付怎么快速赚取积点_云闪付积点快速获取方法

    通过微信小程序用云闪付支付可日赚692积点;62VIP会员消费满10元返积点,月上限3000;转账超1000元得2积点,还款超100元得10积点,每月各限3笔;扫本人收款码支付5元以上每笔得10积点,日限3笔;改定位至杭州领“浙里有优惠”活动卡可得2025积点。 如果您在使用云闪付时希望快速积累积点…

    2025年12月6日 软件教程
    400
  • 怎样用免费工具美化PPT_免费美化PPT的实用方法分享

    利用KIMI智能助手可免费将PPT美化为科技感风格,但需核对文字准确性;2. 天工AI擅长优化内容结构,提升逻辑性,适合高质量内容需求;3. SlidesAI支持语音输入与自动排版,操作便捷,利于紧急场景;4. Prezo提供多种模板,自动生成图文并茂幻灯片,适合学生与初创团队。 如果您有一份内容完…

    2025年12月6日 软件教程
    000
  • Pages怎么协作编辑同一文档 Pages多人实时协作的流程

    首先启用Pages共享功能,点击右上角共享按钮并选择“添加协作者”,设置为可编辑并生成链接;接着复制链接通过邮件或社交软件发送给成员,确保其使用Apple ID登录iCloud后即可加入编辑;也可直接在共享菜单中输入邮箱地址定向邀请,设定编辑权限后发送;最后在共享面板中管理协作者权限,查看实时在线状…

    2025年12月6日 软件教程
    100
  • REDMI K90系列正式发布,售价2599元起!

    10月23日,redmi k90系列正式亮相,推出redmi k90与redmi k90 pro max两款新机。其中,redmi k90搭载骁龙8至尊版处理器、7100mah大电池及100w有线快充等多项旗舰配置,起售价为2599元,官方称其为k系列迄今为止最完整的标准版本。 图源:REDMI红米…

    2025年12月6日 行业动态
    200
  • Linux中如何安装Nginx服务_Linux安装Nginx服务的完整指南

    首先更新系统软件包,然后通过对应包管理器安装Nginx,启动并启用服务,开放防火墙端口,最后验证欢迎页显示以确认安装成功。 在Linux系统中安装Nginx服务是搭建Web服务器的第一步。Nginx以高性能、低资源消耗和良好的并发处理能力著称,广泛用于静态内容服务、反向代理和负载均衡。以下是在主流L…

    2025年12月6日 运维
    000
  • Linux journalctl与systemctl status结合分析

    先看 systemctl status 确认服务状态,再用 journalctl 查看详细日志。例如 nginx 启动失败时,systemctl status 显示 Active: failed,journalctl -u nginx 发现端口 80 被占用,结合两者可快速定位问题根源。 在 Lin…

    2025年12月6日 运维
    100
  • 华为新机发布计划曝光:Pura 90系列或明年4月登场

    近日,有数码博主透露了华为2025年至2026年的新品规划,其中pura 90系列预计在2026年4月发布,有望成为华为新一代影像旗舰。根据路线图,华为将在2025年底至2026年陆续推出mate 80系列、折叠屏新机mate x7系列以及nova 15系列,而pura 90系列则将成为2026年上…

    2025年12月6日 行业动态
    100
  • Linux如何防止缓冲区溢出_Linux防止缓冲区溢出的安全措施

    缓冲区溢出可通过栈保护、ASLR、NX bit、安全编译选项和良好编码实践来防范。1. 使用-fstack-protector-strong插入canary检测栈破坏;2. 启用ASLR(kernel.randomize_va_space=2)随机化内存布局;3. 利用NX bit标记不可执行内存页…

    2025年12月6日 运维
    000
  • 2025年双十一买手机选直板机还是选折叠屏?建议看完这篇再做决定

    随着2025年双十一购物节的临近,许多消费者在选购智能手机时都会面临一个共同的问题:是选择传统的直板手机,还是尝试更具科技感的折叠屏设备?其实,这个问题的答案早已在智能手机行业的演进中悄然浮现——如今的手机市场已不再局限于“拼参数、堆配置”的初级竞争,而是迈入了以形态革新驱动用户体验升级的新时代。而…

    2025年12月6日 行业动态
    000
  • Linux如何优化系统性能_Linux系统性能优化的实用方法

    优化Linux性能需先监控资源使用,通过top、vmstat等命令分析负载,再调整内核参数如TCP优化与内存交换,结合关闭无用服务、选用合适文件系统与I/O调度器,持续按需调优以提升系统效率。 Linux系统性能优化的核心在于合理配置资源、监控系统状态并及时调整瓶颈环节。通过一系列实用手段,可以显著…

    2025年12月6日 运维
    000
  • Pboot插件数据库连接的配置教程_Pboot插件数据库备份的自动化脚本

    首先配置PbootCMS数据库连接参数,确保插件正常访问;接着创建auto_backup.php脚本实现备份功能;然后通过Windows任务计划程序或Linux Cron定时执行该脚本,完成自动化备份流程。 如果您正在开发或维护一个基于PbootCMS的网站,并希望实现插件对数据库的连接配置以及自动…

    2025年12月6日 软件教程
    000
  • Linux命令行中wc命令的实用技巧

    wc命令可统计文件的行数、单词数、字符数和字节数,常用-l统计行数,如wc -l /etc/passwd查看用户数量;结合grep可分析日志,如grep “error” logfile.txt | wc -l统计错误行数;-w统计单词数,-m统计字符数(含空格换行),-c统计…

    2025年12月6日 运维
    000
  • 猜一猜卡牌评级师评定的是什么产品

    支付宝蚂蚁新村最新答案2025年10月25日 1、猜一猜:“卡牌评级师”评定的是什么产品 2、正确答案:热门卡牌 3、答案解析: Type Studio 一个视频编辑器,提供自动转录、自动生成字幕、视频翻译等功能 61 查看详情 近年来,潮玩市场持续升温,卡牌逐渐成为潮流文化与热门IP结合的重要形式…

    2025年12月6日 软件教程
    000
  • 长城汽车公布最新财报:前三季度卖车92万辆 净赚86亿元

    10月24日,长城汽车今日下午公布了其2025年第三季度财务报告。 财报数据显示,今年前三季度,长城汽车实现营业收入1535.82亿元,同比增长7.96%;归属于上市公司股东的净利润为86.35亿元,同比下降16.97%。其中,第三季度单季营收达612.47亿元,同比增长20.51%;归母净利润为2…

    2025年12月6日 行业动态
    000
  • Linux命令行中fc命令的使用方法

    fc 是 Linux 中用于管理命令历史的工具,可查看、编辑并重新执行历史命令。输入 fc 直接编辑最近一条命令,默认调用 $EDITOR 打开编辑器修改后自动执行;通过 fc 100 110 或 fc -5 -1 可批量编辑指定范围的历史命令,保存后按序重跑;使用 fc -l 列出命令历史,支持起…

    2025年12月6日 运维
    000
  • 曝小米17 Air正在筹备 超薄机身+2亿像素+eSIM技术?

    近日,手机行业再度掀起超薄机型热潮,三星与苹果已相继推出s25 edge与iphone air等轻薄旗舰,引发市场高度关注。在此趋势下,多家国产厂商被曝正积极布局相关技术,加速抢占这一细分赛道。据业内人士消息,小米的超薄旗舰机型小米17 air已进入筹备阶段。 小米17 Pro 爆料显示,小米正在评…

    2025年12月6日 行业动态
    000
  • 「世纪传奇刀片新篇」飞利浦影音双11声宴开启

    百年声学基因碰撞前沿科技,一场有关声音美学与设计美学的影音狂欢已悄然引爆2025“双十一”! 当绝大多数影音数码品牌还在价格战中挣扎时,飞利浦影音已然开启了一场跨越百年的“声”活革命。作为拥有深厚技术底蕴的音频巨头,飞利浦影音及配件此次“双十一”精准聚焦“传承经典”与“设计美学”两大核心,为热爱生活…

    2025年12月6日 行业动态
    000
  • 荣耀手表5Pro 10月23日正式开启首销国补优惠价1359.2元起售

    荣耀手表5pro自9月25日开启全渠道预售以来,市场热度持续攀升,上市初期便迎来抢购热潮,一度出现全线售罄、供不应求的局面。10月23日,荣耀手表5pro正式迎来首销,提供蓝牙版与esim版两种选择。其中,蓝牙版本的攀登者(橙色)、开拓者(黑色)和远航者(灰色)首销期间享受国补优惠价,到手价为135…

    2025年12月6日 行业动态
    000
  • Vue.js应用中配置环境变量:灵活管理后端通信地址

    在%ignore_a_1%应用中,灵活配置后端api地址等参数是开发与部署的关键。本文将详细介绍两种主要的环境变量配置方法:推荐使用的`.env`文件,以及通过`cross-env`库在命令行中设置环境变量。通过这些方法,开发者可以轻松实现开发、测试、生产等不同环境下配置的动态切换,提高应用的可维护…

    2025年12月6日 web前端
    000
  • VSCode终端美化:功率线字体配置

    首先需安装Powerline字体如Nerd Fonts,再在VSCode设置中将terminal.integrated.fontFamily设为’FiraCode Nerd Font’等支持字体,最后配合oh-my-zsh的powerlevel10k等Shell主题启用完整美…

    2025年12月6日 开发工具
    000

发表回复

登录后才能评论
关注微信