进程优先级(nice值,top指令),独立性,竞争性,进程切换(时间片),抢占与出让,并发并行概念

本文主要是介绍进程优先级(nice值,top指令),独立性,竞争性,进程切换(时间片),抢占与出让,并发并行概念,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

优先级 

引入

为什么会存在优先级

特点

优先级值 

nice值

更改nice值

top指令

独立性 

竞争性

进程切换 

引入

时间片

上下文切换

调度器

抢占与出让

强占

出让

并发和并行 

并发

并行


优先级 

引入

与权限不同的是,权限是能不能做的问题,优先级是什么时候去做

为什么会存在优先级

  • 系统中可以运行多个进程,每个进程都需要使用资源
  • cpu是有限的
  • 所以就存在谁先谁后使用资源的问题,这些进程需要通过某种方式竞争资源

  • 而优先级,则是调度器在调度时的重要参考
  • 调度 -- 决定将 哪一个在运行队列上的进程 放在 cpu 上

特点

优先级值 

进程的调度优先级(Priority),它是用来控制进程在 CPU 调度中的执行优先级的一个值

  • PRI就是优先级值,越小越先被调度
  • 可以看到,图中这两个进程的PRI值都是80
  • 但是,优先级也是可以被调整的,也就是用图上的NI值修改

nice值

  • NI值也就是nice值是一种修正数据(也就是说,优先级是可以被调整的)
  • 在Linux下,进程的优先级是通过所谓的“Nice值”来管理的
  • Nice值是一个用来表示进程相对优先级的整数
  • linux中: 优先级 = PRI值 + nice值
  • nice值是有范围的,-20到19,所以对进程的影响不大
  • 这是os有意控制的,为了使它可以 更均衡的让所有进程在一定时间范围内都能获得资源
  • 也就是雨露均沾
  • 防止某些恶意进程修改自己的nice值,在每次调度时都优先调度它,从而造成不公平事件
更改nice值
top指令

进入top后,按下' r ',输入要改变进程的pid,随后输入nice值

当我更改code这一进程的pid后(改为10了):

独立性 

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

所以,Linux中的进程是相互隔离的独立执行单元,有助于确保系统的稳定性和安全性

竞争性

Linux中的进程是竞争执行的,这意味着多个进程在竞争有限的系统资源(如CPU时间、内存、文件句柄等)和争夺执行的机会

进程可以通过提高其优先级(降低Nice值)或增加其权重来提高获得CPU时间的机会

进程切换 

引入

  • 其实,一个进程使用cpu的时间是有限制的
  • 如果直到一个进程被执行完才退出,那么其他进程在这一过程中相当于卡死状态(它在独占cpu)
  • 也很可能会造成cpu直接卡死(如果该进程执行的是死循环,就会让计算机直接无法使用) 
  • 所以有了"时间片"这一概念

时间片

  • 是操作系统中用来管理和分配CPU时间的基本概念
  • 它表示操作系统将CPU时间分割成小段的时间间隔,每个时间间隔被分配给一个进程或线程,以允许多个任务交替执行
  • 每个进程在其分配的时间片内运行,达到时间后就让出CPU,以便其他进程执行
上下文切换
  • 在时间片结束时,操作系统会执行上下文切换
  • 将CPU状态保存到当前进程的上下文中(这样下次再来的时候,可以从之前的逻辑继续向后运行)
  • 然后加载下一个进程的上下文,以便继续执行
调度器
  • 操作系统的调度器负责分配时间片给不同的进程
  • 它使用调度算法来确定下一个应该运行的进程,并在时间片结束后切换到下一个进程

抢占与出让

  • 但实际上,进程执行的过程中,并不会死板的按照时间片执行
  • 如果该进程 没有执行完时间片规定的时间 执行完啦,就可以直接退出啦,cpu就让其他进程运行
强占
  • 当 一个进程的优先级 比 正在使用cpu的进程 , 那么那个优先级低的会被扒拉下来,让高的那个先执行
出让
  • 一个进程也可以自己主动让出cpu资源

 

并发和并行 

并发

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

并行

多个进程 在 多个CPU下 分别,同时进行运行

这篇关于进程优先级(nice值,top指令),独立性,竞争性,进程切换(时间片),抢占与出让,并发并行概念的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

go中的时间处理过程

《go中的时间处理过程》:本文主要介绍go中的时间处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 获取当前时间2 获取当前时间戳3 获取当前时间的字符串格式4 相互转化4.1 时间戳转时间字符串 (int64 > string)4.2 时间字符串转时间

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五