WEB开发网
开发学院软件开发Java 使用实时 Java 进行开发,第 2 部分: 改善服务质量... 阅读

使用实时 Java 进行开发,第 2 部分: 改善服务质量

 2009-11-02 00:00:00 来源:WEB开发网   
核心提示: 所以,即使您为工作者线程指定最高的 Java 线程优先级(java.lang.Thread.MAX_PRIORITY),使用实时 Java 进行开发,第 2 部分: 改善服务质量(10),也不会提供与系统上较低优先级任务之间太高的隔离级别,不幸的是,所以很难为实际任务实现这种理想目标,尽管如此,

所以,即使您为工作者线程指定最高的 Java 线程优先级(java.lang.Thread.MAX_PRIORITY),也不会提供与系统上较低优先级任务之间太高的隔离级别。不幸的是,除了使用固定的工作线程集(不继续分配新线程,而依赖于 GC 收集未使用的线程,或者扩大和缩小线程池)并尝试将在应用程序运行时系统上低优先级活动的数量减到最少,您无法采取其他更多措施,因为标准 Java 线程模型未提供控制线程行为所需的工具。在这里,即使是软实时 JVM(如果它依赖于标准 Java 线程模型)也不能经常提供帮助。

但是,与标准 Java 相比,支持 Real Time Specification for Java (RTSJ) 的硬实时 JVM(比如 IBM WebSphere Real Time for Real Time Linux V2.0 或 Sun 的 RTS 2)可以提供大大改进的线程行为。在对标准 Java 语言和 VM 规范的增强中,RTSJ 引入了两类新的线程 RealtimeThread 和 NoHeapRealtimeThread,它们的定义比标准 Java 线程模型要严格得多。这些线程类型提供了真正基于抢占优先级的调度机制:如果需要执行高优先级任务并且处理器核心上目前计划执行一个较低优先级任务,那么该较低优先级任务将被抢占,以便高优先级任务可以执行。

大部分实时 OS 都能够在数十微秒内执行这种抢占机制,这仅会影响到具有极高的计时需求的应用程序。两种新线程类型都是用 FIFO(先进先出)调度策略,而不是在大部分 OS 上运行的 JVM 所使用的熟悉的循环调度策略。循环调度和 FIFO 调度策略之间最明显的区别在于,在具有相同优先级的线程中,一旦计划让一个线程继续执行,那么它只有在遇到阻塞或资源释放处理器时才会停止。此模型的优点在于,执行特定任务的时间更加容易预测,因为处理器不是共享的,即使有多个具有相同优先级的任务。出于此原因,如果您可以通过消除同步和 I/O 优先级来使线程不受阻塞,在线程启动之后,OS 将不会干预它。但是,在实际中,消除所有同步非常困难,所以很难为实际任务实现这种理想目标。尽管如此,FIFO 调度机制为尝试减少延迟的应用程序设计师提供了一项重要帮助。

上一页  5 6 7 8 9 10 

Tags:使用 实时 Java

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接