5.8 轮询调度模式

轮询调度算法(Round-Robin Scheduling) round robin是按照某种合理的顺序平等地选择一组中的所有元素的方法,通常是从列表的顶部到底部,然后再从列表的顶部开始,如此反复。一个简单的解释就是 "轮流 "。作为一个形容词,round robin变成了 "round-robin"。 在计算机操作中,让不同的程序进程轮流使用计算机资源的一种方法是限制每个进程的执行时间为一个很短的时间段,到时间后挂起该进程,轮到另一个进程执行(或 "时间片")。这通常被描述为round-robin(RR)进程调度。 关于这个词的起源: Roun... 阅读详情

Bruce Powel Douglass大师介绍-优快云博客

嵌入式软件开发从小工到专家-优快云博客

C嵌入式编程设计模式源码-优快云博客

5.8.1 Abstract

轮询调度模式(Round Robin Pattern)是一种公平的调度策略,适用于那些所有任务的进展比满足特定截止时间更重要的系统。与循环执行模式(Cyclic Executive Pattern)相似,但轮询模式会基于时间进行任务抢占。这种模式在实时系统的文献中经常被讨论,因为它适用于任务的紧急性比关键性更重要的情况。

紧急性(urgency)通常指任务的截止时间的临近程度,即任务需要在多快的时间内完成。

关键性(criticality)指的是任务完成截止时间的重要性,即如果任务不能在截止时间前完成,对系统的功能或正确性会产生多大的影响。

这两个概念虽然不同,但操作系统通常提供的是一个概念:优先级。操作系统使用任务的优先级来决定当多个任务都准备好运行时,哪些任务应该优先执行。也就是说,操作系统总是优先运行所有当前准备好运行的任务中优先级最高的任务。

在动态优先级模式(Dynamic Priority Pattern)中,最高优先级的任务是截止时间最近的任务。动态优先级模式明确强调紧急性高于关键性。

紧急性和关键性是调度可行性的两个最重要的概念,但操作系统通常提供的是单一的值:优先级。在静态优先级模式(Static Priority Pattern)中,优先级在设计时设置,通常反映了紧急性和关键性的结合。在动态优先级模式中,任务的优先级是在运行时根据任务的紧急性设置的。

简而言之,紧急性关注的是任务完成的时间限制,而关键性关注的是任务完成对系统整体的重要性。两者在任务调度中都是重要的考量因素,但它们影响任务优先级的方式不同。

5.8.2 Problem

轮询模式解决的问题是如何在一个调度周期内,以大致相同的速率推进整个任务集合,特别是那些在单个调度周期内无法完成的任务。

5.8.3 Pattern Structure

轮询模式是循环执行模式的一个简单变体。两者之间的区别在于,轮询模式中的调度器能够抢占正在运行的任务,并且会在收到其关联定时器的时钟中断信号时执行抢占。图 5-15 展示了轮询模式的两种形式。

  • 完整形式(图 5-15a)展示了任务控制块 (Task Control Block) 和栈等基础设施类。
  • 简化形式(图 5-15b)则省略了这些类,只保留了核心结构。

5.8.4 Collaboration Roles

轮询调度模式由多个协作角色共同实现,它们各有其独特的职责:

  • 抽象线程 (Abstract Thread): 抽象类,不可直接实例化,提供任务的基本接口,例如启动、停止、获取状态等。所有具体线程都继承自该抽象类,从而保证接口的一致性。
  • 具体线程 (Concrete Thread): 可实例化的具体任务,包含实际完成系统工作的代码。它封装了这些“语义”对象,并使其融入并发框架。
  • 调度器 (Scheduler): 系统初始化时,调度器首先加载所有任务,然后依次运行它们。任务可以主动交出控制权,也可以在调度器收到定时器信号时被抢占。
  • 栈 (Stack): 与标准编程语言类似,每个线程都需要一个栈来存储局部变量、函数返回值和返回地址。由于线程可能会在执行过程中被中断,因此需要独立的栈来保证恢复执行时的正确性。
  • 任务控制块 (Task Control Block): 该对象为每个任务存储信息,包括初始启动地址和抢占后的重新进入点。系统中每个具体线程都对应一个任务控制块。
  • 定时器 (Timer): 定期向调度器发送时钟中断信号,触发任务切换。通常,定时器与硬件时钟协作,由调度器在系统启动前配置好时钟周期。收到中断后,调度器会执行任务切换操作。

总结:

轮询调度模式通过抽象线程、具体线程、调度器、栈、任务控制块和定时器等角色的协作,实现公平高效的并发任务执行。

5.8.5 Consequences

优点:

  • 公平性: 与循环执行模式一样,轮询模式为所有任务提供了运行机会,保障了公平性。
  • 鲁棒性: 即使某个任务出现错误行为,也不会导致整个系统崩溃。定时器会在恰当的时机进行任务切换,避免单一任务卡死系统。
  • 可扩展性: 相比循环执行模式,轮询模式在处理更多任务时表现出更佳的扩展性。

缺点:

  • 实时性欠佳: 对突发事件的响应不如其他调度模式迅速。
  • 不稳定性: 无法预测哪个任务会在系统超载时率先崩溃。
  • 任务切换开销: 随着任务数量增多,每个任务获得的时间片会缩短,大量任务切换会导致性能损耗,甚至系统“折腾” (thrashing) 现象。
  • 数据共享限制: 该模式提供的的数据共享机制相对简单,实现复杂模型可能存在困难。

总体:

轮询调度模式在公平性和鲁棒性方面表现出色,可扩展性也优于循环执行模式,但实时性和稳定性相对较弱。随着任务数量增加,性能可能恶化。该模式适用于任务间的紧急性差异不大,对响应速度要求不高的场景。

5.8.6 Implementation Strategies

轮询调度模式可以通过以下几步来实现:

  1. 创建抽象线程类,该类提供任务的基本接口,例如启动、停止、获取状态等。
  2. 创建具体线程类,该类继承自抽象线程类,并实现具体的任务逻辑。
  3. 创建调度器类,该类负责管理任务的调度。
  4. 创建定时器类,该类定期向调度器发送时钟中断信号,触发任务切换。

具体实现时,可以使用硬件定时器驱动的中断来实现定时器功能。此外,需要注意以下几点:

  • 具体线程可以通过临时禁用中断来防止在临界区内被抢占。但是,需要注意不要永久禁用中断,否则将导致任务切换无法正常进行。
  • 由于该模式并不假设任务是运行到完成,因此每个任务都需要一个独立的栈来存储局部变量、函数返回值和返回地址,以及一个任务控制块来存储被抢占任务的重新进入点。

总结:

轮询调度模式的实现相对简单,但需要注意一些细节,例如临界区内的中断处理和任务切换时的栈管理。

5.8.7 Related Patterns

轮询模式比循环执行模式稍微复杂一些,但没有静态优先级模式(Static Priority Pattern)和动态优先级模式(Dynamic Priority Pattern)这样的基于优先级的抢占模式复杂。

5.8.8 Sample Model

示例模型展示了一个简单的两任务模型,使用轮询模式实现。在这个简单的案例中,当调度器运行时,它会配置定时器以正确的周期运行,然后轮流执行每个任务。

系统的运行流程如下:

  1. 调度器启动: 首先,调度器配置定时器,设置适当的时间片长度。
  2. 执行第一个任务: 调度器调用第一个任务的默认 run() 操作,并在其栈上运行。
  3. 时间片到期: 定时器发出时钟中断信号,触发任务切换。
  4. 保存现场: 调度器保存当前任务的执行状态,包括栈指针等信息。
  5. 切换栈空间: 调度器激活第二个任务的栈,并设置栈指针为上次任务被中断的位置。
  6. 恢复执行: 调度器从中断处恢复第二个任务的运行。
  7. 反复切换: 时间片到期后,重复上述步骤,在两个任务之间轮流切换,直到所有任务完成。

关键细节:

  • 每个任务拥有独立的栈: 由于任务可能在任意时间点被抢占,独立栈用于保存任务的上下文信息,确保在恢复执行时能从正确的位置继续。
  • 调度器负责任务管理: 调度器负责配置定时器、启动任务、处理时钟中断、保存和恢复任务状态、切换栈空间。
  • 定时器触发抢占: 定时器是轮询模式的核心部件,它定期发出时钟中断信号,驱动调度器进行任务切换。

总结:

轮询模式通过调度器、定时器和独立栈的配合,实现了公平、高效的任务调度。图5-16清晰地展示了该模式的结构和运行流程。

【LVS入门宝典】LVS调度算法轮询(RR)深度解析:从原理到实战的公平调度之道 轮询调度算法作为LVS中最基础、最简单的调度算法,在合适的场景下能够提供优秀的负载均衡效果。轮询算法虽然简单,但正是这种简单性使其成为负载均衡领域的经典选择。在众多调度算法中,轮询(Round Robin,RR)算法以其简单性、公平性和可预测性成为最基础且广泛使用的算法之一。轮询调度算法是一种最简单的负载均衡算法,其核心思想是按照固定的顺序依次将新到达的请求分配给后端服务器。轮询算法就像一位公正的交通警察,按照固定的顺序将车辆(请求)引导到不同的道路(服务器)上,确保每条道路都能获得平等的通行机会。 阅读详情

相关推荐

基于.NET8的Modbus主站调试工具:架构设计与实践复盘

Modbus作为工业自动化领域广泛应用的主从式通信协议,是上位机开发与设备调试的核心基础。理解其RTU、TCP等传输模式的帧结构与轮询机制,对高效排查通信故障至关重要。随着.NET8在性能、跨平台及AOT发布方面的成熟,构建现代化调试工具成为可行路径。在设备点检、产线调试及PLC联调等典型场景中,开发者往往需要集协议调试、数据监控与轻量组态于一体的工作台。本文复盘一款基于.NET8的开源Modbus主站调试工具,涵盖协议引擎分层设计、实时曲线、报文日志及模拟从站等实践,为工控软件开发者提供完整参考。

weixin_42699679的博客 254

轮询调度算法及实例

在轮询调度中,每个准备好的任务只在有限的时间片的循环队列中轮流运行。该算法还提供了进程的无饥饿执行(指某些进程长时间等待,当饥饿到一定程度的进程所赋予的任务即使完成也不再具有实际意义)。轮循机制调度方法的最大优点是,如果您知道运行队列上的进程总数,那么您也可以假设同一进程的最坏情况响应时间。时间片应该是最小的,它是为需要处理的特定任务分配的。轮循机制是传统操作系统中最古老、最公平、最简单的算法之一,也是广泛使用的调度方法。如果你知道运行队列上的进程总数,则还可以假设同一进程的最坏情况响应时间;

m0_55587798的博客 1802

工作经验总结:单片机中简易时间片轮询的结构设计

裸机:功能单一,简单的顺序执行时间片轮询:多任务、内存占用较少RTOS:多任务、系统复杂性高,有较高的实时性要求和可靠性要求MCU的RAM和ROM资源问题,引入RTOS会带来额外的内存开销业务功能的拆解与多任务的设计,有时候使用时间片轮询可以让整个结构更加简单易懂,方便设计调试更为简单方便功能任务划分的合理性,多任务的情况下,每个任务的执行都尽量设计成短小精悍。(例如:执行1个任务需要10ms,你不能只给它分配5ms的时间片)

不吃鱼的猫的博客 8980

轮询调度算法

轮询调度算法 一、轮询调度算法 1、轮询调度算法的原理       每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。 2、算法的特点   轮询调度算法假设所有服务器的处理性能都相同,不关心每台服务器的当前连接数和响应速度。当请求服务间隔时间变化比较大时,轮询调度算法容易导致服务器间的负载不平衡。所以此种均衡算法适合于服务

天生我才必有用,千金散尽还复来! 7595

LVS中nat模式与dr模式配置(rhel9.3)

在 DR 模式下,真实服务器(real servers)和负载调度器(director)必须位于同一物理网络中,并且真实服务器必须配置有虚拟服务的 IP 地址作为别名,但仅由负载调度器响应此 IP 地址的 ARP 请求。在 NAT 模式下,IPVS 会修改进入的数据包的目标 IP 地址和端口号,将它们指向后端真实服务器的 IP 地址和端口号(如果后端服务器使用非标准端口,则也需要指定)。然而,请注意,仅仅添加虚拟服务是不够的,你还需要添加后端真实服务器到 IPVS 表中,并指定它们如何接收和处理这些请求。

wuyyy92的博客 1171

超级详细介绍LVS:概念、运行原理、ipvsadm用法、算法调度、NAT模式、DR模式、防火墙标签解决轮询错误以及对NAT、DR这两个模式的保姆级实战部署!!!

ipvsadm 是一个用于管理 Linux 内核中的 IPVS (IP Virtual Server) 模块的命令行工具。IPVS 是 Linux 虚拟服务器 (LVS) 的核心组件,它提供负载均衡功能。

m0_62900249的博客 1453

三菱FX5U与欧姆龙E5CC温控器通讯程序及输出启停控制(含详细说明与手册

温控器参数里把通讯波特率统一设9600,8N1,Modbus RTU模式——这几个参数要是对不上,PLC能把485口瞪出火星子来。功能:通过三菱FX5U本体485口,结合触摸屏网口,实现对3台欧姆龙E5CC温控器 设定温度,读取温度,同时控制输出启停。功能:通过三菱FX5U本体485口,结合触摸屏网口,实现对3台欧姆龙E5CC温控器 设定温度,读取温度,同时控制输出启停。说明:的是带注释,带温控器手册,接线,参数设置都提供。说明:的是带注释,带温控器手册,接线,参数设置都提供。反应灵敏,通讯稳定可靠。

zVGKKTvT的博客 322

基于pymodbus的多设备RTU轮询机制全面讲解

深入解析如何利用pymodbus构建高效的多设备RTU轮询系统,涵盖连接管理、请求调度与异常处理,提升工业通信稳定性与实时性,是掌握pymodbus应用的必备指南。

weixin_34885746的博客 783

代理服务器-LVS的3种模式与调度算法

上一小节我们介绍了LVS的概念和部署,本小节来讲解LVS的工作模式和调度算法。本小节的内容都是理论知识,在很多地方其实都能搜索到大致相似的内容。

1005

深入解析DMA通道优先级机制:轮询与高优先级模式实战

直接内存访问(DMA)是现代嵌入式系统中提升数据吞吐效率、解放CPU算力的关键技术。其核心原理在于允许外设与内存之间直接进行数据搬运,无需CPU介入。理解DMA的调度机制,尤其是通道优先级,对于构建稳定、高效的实时系统至关重要。在复杂的多任务场景下,当多个外设同时请求DMA服务时,不同的优先级策略将直接影响系统的确定性和最坏情况响应时间。轮询模式提供了公平的调度,确保所有通道按顺序获得服务,适用于带宽需求平均的场景;而高优先级模式则为关键实时数据流(如高速ADC采样)提供了可抢占的快速通道,是保障系统实时性

weixin_30715523的博客 363

HART主模式协议栈实现:帧结构、命令解析与轮询调度

HART协议是工业现场仪表通信的基础,主模式协议栈需处理帧组装、命令编码与应答解析。帧结构包含前导码、定界符、地址、命令、数据和校验,其中地址编码与校验和计算是关键。主站通过状态机管理事务生命周期,结合轮询调度实现多设备时序管理。技术价值在于提供可复用的嵌入式主站实现,避免商业协议库绑定。应用场景包括仪表调试、协议学习与嵌入式开发。本文深入讲解HART主模式协议栈的帧结构、命令层处理与轮询实现,帮助开发者稳定与现场设备对话。

weixin_30175731的博客 286

AgentScope框架多智能体轮询模式实现详解

轮询调度是分布式系统中的基础算法,通过循环分配任务实现负载均衡。其核心原理是维护执行对象队列并按固定顺序选择,确保资源分配的公平性。在AI工程领域,这种模式特别适合多智能体协作场景,能有效处理均匀粒度的并行任务。AgentScope框架基于松耦合架构设计,开发者可灵活集成轮询等调度策略。技术实现上需关注线程安全锁、批量调度等关键点,典型应用包括客服系统的请求分配、计算资源负载均衡等场景。通过结合权重机制和混合调度策略,可以进一步提升系统在复杂业务环境中的适应性。

weixin_30768881的博客 58

基于轮询的任务调度系统

基于轮询的任务调度系统,对于不用freertos的开发来说很适合。可以大大缩短开发周期,代码的结构也清晰

lvs的调度算法有几种_LVS基本原理及常见工作模式

LVS基本工作原理1.当用户向负载均衡器(Director Server)发起请求,调度器将请求发送至内核空间。2.Prerouting链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发送到INPUT链。3.IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已经定义好的集群服务进行对比,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数...

weixin_27722377的博客 284

加权轮询调度算法DWRR

权重轮询调度算法(WeightedRound-RobinScheduling)-matlab实现

金仓数据库KCM认证考试介绍【2025年4月更新】

金仓数据库认证资深专家KCM认证考试介绍

qq709869231的博客 3228

【 n8n解惑】 n8n 的 “Webhook” 节点与传统轮询式自动化有何根本区别?

n8n 的 “Webhook” 节点与传统轮询式自动化有何根本区别?

人工智能(AI)技术,大模型技术,深度学习,机器学习,计算机视觉,AI工具实践应用等分享 1060

别再死记硬背了!用MaxDEA软件实操SBM、DDF、NDDF模型,手把手教你测算绿色全要素生产率

本文深度解析如何使用MaxDEA软件实操SBM、DDF、NDDF模型,手把手教你测算绿色全要素生产率(GTFP)。通过详细的模型选择对比、数据准备策略和MaxDEA操作流程,帮助研究者科学构建指标体系并准确解读结果,提升环境管理研究的实证分析能力。

weixin_28731231的博客 314

HPM6750系列--第十二篇 Uart实战(轮询模式下的高效数据收发)

本文深入解析HPM6750系列芯片在Uart轮询模式下的高效数据收发技巧。通过详细的基础配置、FIFO阈值优化、多串口框架设计及实战案例,帮助开发者充分利用HPM6750的17个串口资源,实现低延迟、高可靠性的通信方案。特别适合需要多串口轮询的应用场景。

weixin_33947521的博客 602

微信小程序推广策略,打开小程序领域流量大门

本文旨在为小程序开发者、运营者和企业主提供一套完整的微信小程序推广策略体系,帮助他们在竞争激烈的小程序生态中获得更多流量和用户。内容涵盖从0到1的冷启动策略,到成熟期的增长技巧。本文将首先介绍小程序的基础推广设置,然后深入探讨各种流量获取渠道,接着分析数据驱动的优化方法,最后展望未来发展趋势。小程序:无需下载安装即可使用的应用,运行在微信生态内:独立访客数:页面浏览量转化率:完成目标行为的用户比例留存率:用户在一定时间后仍活跃的比例自然流量获取:通过优化搜索、完善资料等方式获得基础流量社交裂变。

小程序开发 1031

Unity 热更新技术 | (二) AssetBundle - 完整系列教程学习

开始学习热更新方面系列知识,就从这一篇开始吧! 本系列教程 会从热更新基本概念出发,详细介绍热更新相关的全套知识点。 如热更新技术基本原理、热更新主流方案、AssetBundle系列教程、Lua语言编程、Lua与Unity交互教程、Xlua框架使用、热更新实战教程等方面。 热更新作为一个开发者必备技能,如果想学习的话,可以从现在开始了哦~ 接下来从 AssetBundle - 完整系列教程学习 开始学习吧!

努力前行,总会成为自己心中的那道光 1万+
上一篇: 5.3 实时操作系统中的同步机制
下一篇: 5.9 静态优先级模式(Static Priority Pattern)
Let's Chat Coding
博客等级 码龄3年 1020粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值