实时Java,第3部分

线程化和同步是 Java 编程语言的核心特性,Java 语言规范(JLS)中对二者作出了描述。RTSJ 用多种方式扩展了 JLS 的核心功能。(参见 参考资料 中关于 JLS 和 RTSJ 的链接。)例如,RTSJ 引入了一些新的实时(RT)线程类型,它们必须遵守比普通 Java 线程更加严格的调度策略。另一个例子是优先级继承,它是一种锁定策略,定义了锁竞争时如何管理锁同步。

理解对优先级和优先级序列的管理有助于理解 RTSJ 针对线程化和同步所作的更改。优先级也是 RT 应用程序使用的一种重要工具。本文通过讨论如何管理线程优先级和优先级序列来描述 RTSJ 线程化和同步。讨论了开发、部署和执行 RT 应用程序(包括使用 IBM WebSphere Real Time 开发的应用程序,参见 参考资料)时应该考虑的一些方面。

理解普通的 Java 线程

JLS 中定义的线程称为普通 Java 线程。普通 Java 线程是 java.lang.Thread 类的一个实例,该类拥有从 1 到 10 的 10 个优先级别。为了适应大量的执行平台,JLS 在如何实现、调度和管理普通 Java 线程的优先级方面提供了很大的灵活性。

WebSphere VMs on Linux(包括 WebSphere Real Time)使用 Linux 操作系统提供的本地线程化服务。您可以通过理解 Linux 的线程化和同步来学习 Java 的线程化和同步。

Linux 线程化和同步

Linux 操作系统发展至今已经提供了不同用户级别的线程化实现。Native POSIX Thread Library(NPTL)(参见 参考资料)是 Linux 最新版本的战略性线程化实现,由 WebSphere VMs 所使用。NPTL 与它的前任相比优势在于 POSIX 兼容性和性能。在编译时可通过系统的头文件获取 POSIX 服务。可在运行时通过 libpthread.so 动态库和底层 Linux 核心支持获取 POSIX 服务。Linux 核心可以根据静态控制(如线程优先级级别)和系统中执行的线程的某些动态条件下来执行线程调度。

POSIX 允许您创建具有不同线程调度策略和优先级的 POSIX 线程(pthreads)以满足不同应用程序的需求。下面是三种此类的调度策略:

SCHED_OTHER

SCHED_FIFO

SCHED_RR

SCHED_OTHER 策略用于传统用户任务,如程序开发工具、办公应用程序和 Web 浏览器。 SCHED_RR 和 SCHED_FIFO 主要用于具有更高的确定性和时限需求的应用程序。SCHED_RR 和 SCHED_FIFO 之间的主要区别是 SCHED_RR 分时间片 执行线程,而 SCHED_FIFO 则不是这样。SCHED_OTHER 和 SCHED_FIFO 策略用于 WebSphere Real Time,并在下面作出了更加详细的描述。(我们不介绍 SCHED_RR 策略,WebSphere Real Time 没有使用它。)

POSIX 通过 pthread_mutex 数据类型提供锁定和同步支持。pthread_mutex 可以使用不同的锁定策略创建。当多个线程需要同时获取同一个锁的时候,锁定策略常常会影响执行行为。标准的 Linux 版本支持单个的默认策略,而 RT Linux 版本还支持优先级继承锁定策略。我们将在本文的 同步概述 一节对优先级继承策略作更详细的描述。

Linux 调度和锁定用来管理先进先出(FIFO)队列。

时间: 2024-11-01 01:31:15

实时Java,第3部分的相关文章

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

Java 应用程序中的易变性(通常是由暂停或延迟导致的,其发生时间无法预测)可能在整个软件栈中发生.延迟可由以下因素引起: 硬件(缓存期间) 固件(处理 CPU 温度数据等系统管理中断的过程中) 操作系统(响应一个中断或执行定期调度的后台活动) 在相同系统上运行的其他程序 JVM(垃圾收集.即时编译和类加载) Java 应用程序本身 很难在较高级别上补偿较低级别上的延迟,所以,如果您试图仅在应用程序级别解决易变性,您可能只是转移了 JVM 或 OS 延迟,并没有解决实际问题.幸运的是,较低级别的

使用实时Java进行开发,第1部分 探索实时Java的独特功能

实时 Java 是对 Java 语言的一组增强,为应用程序提供了一定程度的实时性能,这些实时性能是标准 Java 技术所不能提供的.传统的吞吐量性能通常是对可在固定时间量内完成的指令.任务或工作的总数的衡量.与传统的吞吐量性能不同,实时性能专注于应用程序(在不超出给定时间约束的情况下)响应外部刺激因素所需的时间.在硬 实时系统中,决不能超出这类约束:软 实时系统对违规具有更高的容忍度.实时性能要求应用程序本身控制处理器,以便它能够响应刺激因素,并且在响应刺激因素的同时,虚拟机内的竞争进程不会阻止

实时Java,第5部分

本系列 的前几篇文章讨论了 IBM WebSphere Real Time 如何解决了不确定性问题,从而获得极低的 timescale 值(延迟值).这种功能将 Java 平台的范围和收益扩展到原本仅适用于特定的实时(RT)编程语言(如 Ada)的领域之中.RT 硬件和操作系统往往是定制的,难以理解.与之不同,WebSphere Real Time 运行在兼容 IBM BladeCenter LS20(请参见 参考资料)和类似硬件的 Linux RT 版本之上.它支持典型 RT 应用程序的需求:

实时Java,第4部分

实时系统和垃圾收集 实时(RT)应用程序开发与通用应用程序开发的差异在于前者对部分运行时行为强加了时间限制.此类限制通常是对应用程序的某些部分实施的,比如中断处理程序,其响应中断的代码必须在给定的时间范围内完成工作.对于硬 RT 系统,比如心脏监测器或国防系统,如果这类系统的运行超出时限,可以看作是整个系统的灾难性失败.而对于软 RT 系统,超出时限可能会有些不利影响 -- 比如 GUI 不能显示其监控流的所有结果 -- 但是不会导致系统失败. 在 Java 应用程序中,Java 虚拟机(JVM

实时Java,第2部分

Java 应用程序的性能经常成为开发社区中的讨论热点.因为该语言的设计初衷是使用解释的方式支持应用程序的可移植性目标,早期 Java 运行时所提供的性能级别远低于 C 和 C++ 之类的编译语言.尽管这些语言可以提供更高的性能,但是生成的代码只能在有限的几种系统上执行.在过去的十年中,Java 运行时供应商开发了一些复杂的动态编译器,通常称作即时(Just-in-time,JIT)编译器.程序运行时,JIT 编译器选择将最频繁执行的方法编译成本地代码.运行时才进行本地代码编译而不是在程序运行前进

实时Java,第1部分: 使用Java语言编写实时系统

由于很多重要原因,Java 语言在实时系统中的应用非常有限.这些原因包括 Java 语言设计中固有的不确定性性能影响,例如动态类加载,以及 Java 运行时环境(Java Runtime Environment,JRE)本身的不确定性性能影响,例如垃圾收集器和本地代码编译.Real-time Specification for Java (RTSJ) 是一种开放的规范,它进一步增强了 Java 语言的开放性,使它能够用来构建实时系统(参见 参考资料).要实现 RTSJ 规范,要求具备操作系统.J

Java如何设计、编码、验证和分析基本的实时应用程序

本文是 使用实时 Java 进行开发 系列的第三期文章,也是最后一期文章,它介绍了如何设计.编写.验证和分析基本的http://www.aliyun.com/zixun/aggregation/18208.html">实时应用程序.我们将阐述: 应用程序的时态和性能要求. 为什么传统的非实时 Java 不适合于应用场景. 哪些实时 Java 编程技术被选中. 实现确定性的考虑因素. 测试和验证应用程序的确定性. 调试实时确定性问题的工具和技术. 提高可预见性的选项.我们使应用程序的设计和代

JAVA编程思想 课程进展 一

编程 第1章 对象入门 "为什么面向对象的编程会在软件开发领域造成如此震憾的影响?" 面向对象编程(OOP)具有多方面的吸引力.对管理人员,它实现了更快和更廉价的开发与维护过程.对分析与设计人员,建模处理变得更加简单,能生成清晰.易于维护的设计方案.对程序员,对象模型显得如此高雅和浅显.此外,面向对象工具以及库的巨大威力使编程成为一项更使人愉悦的任务.每个人都可从中获益,至少表面如此.如果说它有缺点,那就是掌握它需付出的代价.思考对象的时候,需要采用形象思维,而不是程序化的思维.与程序

Java:互联网编程领域的过去与未来之王

作为一款专门针对嵌入式计算与实时化流程场景所构建的编程语言,Java将成为物联网时代下的最佳开发选项. 对于大家来说,Java到底意味着什么?在校园里头学习过的一款编程语言?企业IT领域的求职神油?抑或是将Java视为主宰互联网后爆发时代的统治性语言?作为一款专门针对嵌入式计算与实时化流程场景所构建的编程语言,我们将在本文中论证Java在物联网时代下成为最佳开发选项的几大理由. 从1969年至今的这段漫长时光当中,网络设备已经完成了完整的爆发式增长流程.从当初通过ARPANET实现对接的四台高校