首页 > 编程语言 >【优先级调度算法:抢占式与非抢占式】

【优先级调度算法:抢占式与非抢占式】

时间:2024-02-03 11:32:25浏览次数:29  
标签:processes 优先级 process priority 算法 与非 抢占

(文章目录)

前言

在操作系统中,进程调度决定了哪个进程应该获得CPU的使用权,以便能够执行。而优先级调度算法就是其中之一,它通过为每个进程分配一个优先级来决定进程的执行顺序。

什么是优先级调度算法?

优先级调度算法是一种用于确定哪个进程将在CPU上执行的方法。每个进程都会被分配一个优先级,数字越小表示优先级越高。当有多个进程竞争CPU时,具有最高优先级的进程将被选中执行。确保一些重要的任务得到优先处理。

抢占式与非抢占式优先级调度算法

1. 非抢占式优先级调度算法

非抢占式优先级调度算法是指一旦一个进程开始执行,它将一直运行,直到完成或者被阻塞。在这种情况下,优先级的重要性变得尤为关键,因为低优先级的进程可能永远无法执行。

代码示例(Python):

class Process:
    def __init__(self, name, priority):
        self.name = name
        self.priority = priority

def non_preemptive_priority_scheduling(processes):
    processes.sort(key=lambda x: x.priority)
    for process in processes:
        print(f"Executing process {process.name} with priority {process.priority}")

# 示例用法
processes = [Process("A", 2), Process("B", 1), Process("C", 3)]
non_preemptive_priority_scheduling(processes)

2. 抢占式优先级调度算法

抢占式优先级调度算法允许更高优先级的进程随时抢占CPU,并执行,即使当前正在执行的进程还没有完成。这种算法确保了高优先级任务的及时响应。

代码示例(Python):

class Process:
    def __init__(self, name, priority):
        self.name = name
        self.priority = priority

def preemptive_priority_scheduling(processes):
    time = 0
    while processes:
        highest_priority_process = min(processes, key=lambda x: x.priority)
        print(f"Executing process {highest_priority_process.name} with priority {highest_priority_process.priority}")
        processes.remove(highest_priority_process)
        time += 1

# 示例用法
processes = [Process("A", 2), Process("B", 1), Process("C", 3)]
preemptive_priority_scheduling(processes)

总结

优先级调度算法可以根据进程的优先级来确定执行顺序。在非抢占式算法中,进程一旦开始执行,将一直运行,而在抢占式算法中,更高优先级的进程可以随时抢占CPU。

标签:processes,优先级,process,priority,算法,与非,抢占
From: https://blog.51cto.com/u_16202095/9568740

相关文章

  • 痞子衡嵌入式:我入选了2023年度与非网(eefocus)最佳创作者Top15
    最近收到了「与非网」发来的2023年度最佳创作者证书,证书做得一如既往地有质感,这是与非网第二次给痞子衡发证书了,足见与非网对痞子衡的认可。与非网自2021年起,每年都会评选一次年度创作者,第一年叫星选创作者TOP10,第二年叫影响力创作者TOP10,第三年也就是今年变成了最佳创......
  • 优先级队列的应用 I
    目录1.题目列表2.应用2.1.Leetcode295.数据流的中位数2.1.1.题目2.1.2.解题思路2.1.3.代码实现1.题目列表题目列表:序号题目难度1295.数据流的中位数困难2.应用2.1.Leetcode295.数据流的中位数2.1.1.题目295.数据流的中位数中位数是......
  • maven依赖的优先级
    优先级在Maven中,依赖的解析顺序和优先级如下:直接依赖优先级高于传递性依赖:如果你在项目的pom.xml中直接声明了某个依赖项,那么Maven会首先尝试使用这个直接声明的依赖项,而不考虑传递性依赖。直接依赖项的版本号会优先于传递性依赖。最近者优先:如果有多个传递性依赖解析......
  • 开发者如何用免费抢占市场?
    其实很多saas服务商都采用免费的方式提供产品,并在一些特定的条件下付费。免费是一种很好的抢占市场的方式,360当年打败瑞星就是靠着免费杀毒这一招。可以把大部分用户吸引过来,并且可以获得巨大的营销优势,与此同时还能阻碍新的竞争者的出现,让其它人不敢踏入这个市场。免费还有如下......
  • 选择器优先级
    1、简单了解    2、详细了解选择器的优先级(a,b,c) 当鼠标悬浮选择器的时候会出现一组权重  行内样式是指在body里直接定义元素的样式 ......
  • 正则表达式复习五——运算符优先级
    运算符优先级正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。相同优先级的从左到右进行运算,不同优先级的运算先高后低。各种正则表达式运算符的优先级从最高到最低顺序:序号字符含义1\转义符2(),(?:),(?=),[]圆括号和方括号3*,+,......
  • 前K个高频元素 347 暴力法和优先级队列
    关于暴力法简单说一点,我是用链表进行比较排序的,但是有一个细节要注意。点击查看代码structnode{intval;intcount;node*next;node(intval,intcount):val(val),count(count),next(nullptr){}};关于节点的构造函数,一定要构造......
  • 绑定方法与非绑定方法md
    绑定方法绑定方法:绑定给某个目标(类或对象)的方法---动态方法绑定给对象的方法类的属性有两种:一种是数据属性一种是函数属性classStudent:#【1】数据属性address='上海'#【2】函数属性defrun(self,name):print(f'{name}正在跑步')......
  • 21-优先级调度:你必须掌握的 Pod 抢占式资源调度
    随着我们在Kubernetes集群中部署越来越多的业务,势必要考虑集群的资源利用率问题。尤其是当集群资源比较紧张的时候,如果此时还要部署一些比较重要的关键业务,那么该如何去提前“抢占”集群资源,从而使得关键业务在集群中跑起来呢?这里一个最常见的做法就是采用优先级方案。通过给P......
  • SpringBoot配置加载优先级
    优先级:命令行参数>环境变量>配置文件1.命令行参数配置java-jar-Dserver.port=8000ruoyi-admin.jar2.环境变量配置linux系统环境:#申明环境变量exportSERVER_PORT=10000#执行jar包java-jardemo.jarwindow系统环境:idea中:java-jar命令使用环境变量需要再win系统环境变量中......