知识大全 Java进阶 Java应用程序中动态分配CPU资源[2]

Posted

篇首语:或许是时间炖化了他们的异端,或许是岁月油炸了我的坚持。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java进阶 Java应用程序中动态分配CPU资源[2]相关的知识,希望对你有一定的参考价值。

Java进阶 Java应用程序中动态分配CPU资源[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   Java的线程虽然在编程角度(API)是与平台无关的 但它的运行效果却和不同操作系统平台密切相关 为了利用更多的CPU资源 Java中的一个线程 (Thread)就对应着不同操作系统下的一个真实线程 因为Java虚拟机没有实现线程的调度 所以这些Java的线程在不同操作系统调度下运行的差异性也就比较明显 例如在Windows系统中 不仅线程的优先级少于Java API参数规定的十个优先级 而且微软明确反对程序员动态调整线程优先级 即使在操作系统中有足够的优先权 让线程优先级的参数和真实线程的优先级对应 不同操作系统的调度方式也会有许多不同 这最终会造成代码在不同平台上的行为变得不可预测 这就很难满足复杂的 大规模并发任务的众多优先级需求 从而很难达到用户业务需要达到的效果

   由于在Java系统中 线程被包装在一个Java语言的对象类—Thread中 所以为了完成Java语言对象和操作系统线程的对应 Java线程的系统开销还是比较大的(在NT 中 平均每个线程大致占用 KB内存) 因此如果让Thread对象个数和成千上万的任务数同比例增长 就显然是不合理的

  综上所述 根据并发多任务的大规模需求和Java平台固有的特点 想要利用Java Thread对象的优先级调整CPU资源的分配是非常困难的 所以应该尽量避免让线程和任务直接对应 也尽量避免使用操作系统线程优先级的调度机制

  解决方案

  根据以上分析 问题的症结在于 多任务系统中的任务在Java语言中的对应以及任务间的相互调度

  从本质上看 一个任务就是一系列对象方法的调用序列 与Java的Thread对象或者别的类的对象没有必然联系 在避免使用不同操作系统线程调度且同时Java虚拟机又没有线程调度能力的情况下 要想构造一个协调式多任务系统 让各个任务相互配合就成了最直接的思路 协调式多任务系统一般有以下特点

   任务由消息驱动 消息的响应代码完成任务逻辑的处理;

   消息队列完成消息的存储和管理 从而利用消息处理的次序体现任务优先级的不同;

   任务中耗时的消息响应逻辑能够主动放弃CPU资源 让别的任务执行(像Windows 中的Yield函数 Visual Basic中的DoEvents语句)

  可能出于巧合 Java语言具有构造协调式多任务系统天然的条件 Java对象的方法不仅是一个函数调用 它还是一个java lang reflect Method类的对象 而所有对象的方法都可以通过Method类的invoke 方法调用 如果能使每个任务所对应的一系列方法全部以对象形式包装成消息 放到消息队列中 然后再按照自己的优先级算法将队列中的消息取出 执行其 Method对象的invoke调用 那么一个基本的协调式多任务系统就形成了 其中 任务的优先级和线程的优先级没有绑定关系 该系统的主体调度函数可以设置成一个 死循环 按照需要的优先级算法处理消息队列 对于有多重循环 外设等待等耗时操作的消息响应函数 可以在响应函数内部递归调用主体调度函数 这一次调用把原来的 死循环 改成在消息队列长度减少到一定程度(或者为空)后退出 退出后 函数返回 执行刚才没有完成的消息响应逻辑 这样就非常自然地实现了协调式系统中任务主动放弃CPU资源的要求

cha138/Article/program/Java/hx/201311/27235

相关参考

知识大全 Java进阶 Java应用程序中动态分配CPU资源[3]

Java进阶Java应用程序中动态分配CPU资源[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 Java进阶:Java编写通过代理访问的应用程序

Java进阶:Java编写通过代理访问的应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java进阶 Java中具有实例缓存的不可变类

Java进阶Java中具有实例缓存的不可变类  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  不可

知识大全 Java动态程序设计——反射介绍

Java动态程序设计——反射介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java动态程序

知识大全 Java应用的动态扩展

Java应用的动态扩展  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这里所谓的可扩展应用是指这

知识大全 高级应用——Java动态的程序设计

高级应用——Java动态的程序设计  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  类和类的装载 

知识大全 Java技术进阶 基于Java的IDEA加密算法探讨

Java技术进阶基于Java的IDEA加密算法探讨  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 Java进阶 关于Java Socket编程的详细介绍[2]

Java进阶关于JavaSocket编程的详细介绍[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 Java进阶 关于Java Socket编程的详细介绍[1]

Java进阶关于JavaSocket编程的详细介绍[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 进阶教程——Java网络编程

进阶教程——Java网络编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java最初是作为一