实时Java,第3部分 - 线程化和同步 - 编程入门网
别的锁而不是系统级别的锁。
如有需要,Linux 可将线程从一个处理程序迁移到另一个处理程序以平衡工作量。 在(40 个中的)每个优先级级别中,Linux 管理活动队列 和过期队列。每个队列包含一个线程链表(或者为空)。使用活动和过期队列出于以下目的:效率、负载平衡和其他一些目的。逻辑上可将系统看作:为(40 个中的)每个优先级管理一个 FIFO 序列,称为运行队列。一个从非空运行队列的前端分派的线程具有最高的优先级。该线程从队列中移除并执行一段时间(称作:时间量 或时间片)。当一个执行线程超过 它的时间量时,它的优先级被放在运行队列的后端并给它指定了新的时间量。通过从队列的前端分派线程和在队列的后端放置过期的线程,程序在一个优先级中轮替执行。 为线程提供的时间量取决于给线程指定的优先级。指定了较高优先级的线程拥有较长的执行时间量。为了防止线程霸占 CPU,Linux 根据一些因素(如线程是 I/O 限制还是 CPU 限制)动态提高或降低线程的优先级。线程可以通过让步(如调用 Thread.yield())自愿地放弃它的时间片,或通过阻塞放弃控制权,在阻塞处等待事件发生。释放锁可以触发一个这类的事件。 WebSphere Real Time 中的 VM 没有显式地指定跨越 40 个 SCHED_OTHER Linux 线程优先级的 10 个普通 Java 线程优先级。所有的普通 Java 线程,不论其 Java 优先级如何,都被指定为默认的 Linux 优先级。默认的 Linux 优先级处于 40 个 SCHED_OTHER 优先级的中间位置。通过使用默认优先级,普通 Java 线程可以顺利地执行,即不论 Linux 可能作出何种动态优先级调整,运行队列中的每个普通 Java 线程都能最终得到执行。这里假设的是只执行普通 Java 线程的系统而不是其他系统,比如执行 RT 线程的系统。 注意:WebSphere Real Time 中的 VM 和 WebSphere VM 的非 RT 版本都使用 SCHED_OTHER 策略并针对普通 Java 线程使用默认优先级指定。通过使用相同的策略,这两种 JVM 具有相似但不相同的线程调度和同步特征。WebSphere Real Time 类库中的更改、JVM 中的更改和为支持 RTSJ 而在 JIT 编译器中作出的更改,以及 RT Metronome 垃圾收集器的引入(参见 参考资料)使应用程序不可能在两种虚拟机中以相同的同步和性能特征运行。在 IBM WebSphere Real Time 测试期间,在测试程序中,同步差异使竞争条件(换言之,bug)浮出了水面,而这些测试程序已经在其他 JVM 上运行了很多年。 实时Java,第3部分 - 线程化和同步(3)时间:2011-06-22 Patrick Gallop Mark使用普通 Java 线程的代码示例 清单 1 展示了一个使用普通 Java 线程的程序,确定了两个线程中的每一个在五秒的时间间隔内在一个循环中执行的迭代次数: 清单 1. 普通 Java 线程
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |