进程优先级(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

相关文章

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.