实时Java,第3部分 - 线程化和同步 - 编程入门网
程调度程序必须从非空的最高优先级队列的头部开始调度。注意:如果所有队列中的线程都不具有 RT 优先级,则调度一个普通 Java 线程按 JLS 中的描述执行(参见 普通 Java 线程的线程调度)。
具有 RT 优先级的调度线程可以一直执行直至阻塞,通过让步自愿放弃控制权,或被具有更高 RT 优先级的线程抢占。具有 RT 优先级并自愿让步的线程的优先级被置于队列的后端。RTSJ 还要求此类调度在不变的时间内进行,并且不能随某些因素变化(如当前执行的 RT 线程的数量)。RTSJ 的 1.02 版本对单处理器系统应用了这些规则;RTSJ 对于多处理器系统上的调度如何运作未作要求。 Linux 为所有适当的 RTSJ 调度需求提供了 SCHED_FIFO 策略。SCHED_FIFO 策略用于 RT 而不用于用户任务。SCHED_FIFO 与 SCHED_OTHER 策略的区别在于前者提供了 99 个优先级级别。SCHED_FIFO 不为线程分时间片。同样,SCHED_FIFO 策略也不动态调整 RT 线程的优先级,除非通过优先级继承锁定策略(同步概述 一节对此作出了描述)。由于优先级继承的原因,RTSJ 需要使用优先级调整。 Linux 为 RT 线程和普通 Java 线程提供不变时间调度。在多处理器系统中,Linux 试图模拟分派到可用处理器的单个全局 RT 线程队列的行为。这与 RTSJ 的精神最为接近,但确实与用于普通 Java 线程的 SCHED_OTHER 策略不同。 实时Java,第3部分 - 线程化和同步(5)时间:2011-06-22 Patrick Gallop Mark使用 RT 线程的有问题的代码示例 清单 2 修改 清单 1 中的代码来创建 RT 线程而不是普通 Java 线程。使用 java.realtime.RealtimeThread 而不是 java.lang.Thread 指出了其中的区别。第一个线程创建于第 4 RT 优先级而第二个线程创建于第 6 RT 优先级,与 getPriorityMin() 方法确定的相同。 清单 2. RT 线程
清单 2 中修改后的代码存在一些问题。如果程序在单处理器环境中运行,则它永远不会结束并且只能打印以下内容:
出现这样的结果可以用 RT 线程调度的行为来解释。原始线程仍然是一个普通 Java 线程并利用非 RT(SCHED_OTHER)策略运行。只要原始 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |