分手快乐 发表于 2015-1-18 11:34:19

JAVA网页编程之Java使用程序中静态的分派CPU资本仓酷云

一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。  Java的线程调剂操纵在运转时是与平台有关的。一个多义务体系必要在义务之间完成QoS(QualityofService)办理时,假如CPU资本的分派基于Java线程的优先级,那末它在分歧平台上运转时的效果是很难展望的。
  本文使用和谐式多义务模子,提出一个与平台有关、而且能在义务间静态分派CPU资本的计划。
  如今,因为盘算机体系已从人机交互慢慢向机机交互转化,盘算机和盘算机之间的营业关于工夫的请求十分高。软件体系关于营业的撑持已不但体现为对分歧营业的逻辑和数据(算法+数据布局)撑持,并且还体现为对同时处置分歧义务的时效性(义务呼应速率)撑持。一样平常,义务呼应的速率能够经由过程算法优化及并交运算分管负载等手腕来进步。可是,用户营业逻辑的庞大度决意了算法优化的发扬空间,硬件范围决意了所可以承当负载的巨细。我们使用Java平台的特性,自创和谐式多义务头脑,使CPU资本可以在义务间静态分派,从而为工夫请求强的义务分派更多的CPU运转资本。这也能够充实使用现有硬件,为用户营业供应最年夜的保证。
  用Java办理成绩
  本着软件体系布局和实际体系布局分歧的头脑,开辟庞大营业服务的程序一样平常依照盘算机义务和实际营业对应的思绪,终极构成一个年夜范围的多义务体系。因为其跨平台性,Java体系能够跟着营业的扩展,光滑地晋级到各类硬件平台上。因为Java本身的开展及其使用场所的不休扩展,用它完成多义务体系已成为以后的使用偏向。在J2EE(Java2EnterpriseEdition)推出今后,Sun公司已将Java的重心放在了服务器端(ServerSide)体系的机关上。因为客户/服务器模子固有的多对一的干系,服务器端程序也一定是一个多义务体系。
  在Java多义务使用中,静态地将CPU资本在义务间分派有很主要的意义。好比一个Internet服务商的体系常常有多种义务同时运转,有HTTP、FTP、MAIL等协定的撑持,也有商务、文娱、生存、征询等营业的服务。在日间,网站但愿体系的CPU资本只管保证网上用户的服务质量,进步电子商务等义务的呼应速率;早晨则但愿让本人的文娱服务和材料下载尽量满意上班先人们的必要。别的,在新兴的网管(好比TMN,TelecommunicationManagementNetwork)等使用范畴中,服务程序常常必要撑持不计其数个并发呼应事务的被办理对象(MO,ManagedObject)。关于被办理对象实行的操纵,分歧用户在分歧时候常常有分歧的工夫请求。
  计划选择
  在思索静态分派CPU资本的实行计划时,常常有以下两点请求:
  1.须充实使用现有硬件资本,在体系余暇时,让低优先级义务也可以失掉体系所能赐与的最快呼应。
  2.当硬件资本超负荷运转时,固然体系中有年夜范围、多半量的义务不克不及处置,但它不该受影响,而可以顺遂处置那些可以被处置的、最主要的高优先级义务。
  多义务体系要用多线程完成的最复杂办法就是将线程和义务逐一对应,静态调剂线程的优先级,使用线程调剂来完成CPU资本在分歧义务间静态分派。这类思绪在之前利用当地化代码(NativeCode),充实使用特定硬件和操纵体系技能的基本上是基础可行的。但在跨平台的Java情况中,这个思绪对唯一小范围义务数的复杂体系才可行,缘故原由有以下两点:
  1.Java的线程固然在编程角度(API)是与平台有关的,但它的运转效果却和分歧操纵体系平台亲切相干。为了使用更多的CPU资本,Java中的一个线程(Thread)就对应着分歧操纵体系下的一个实在线程。由于Java假造机没有完成线程的调剂,以是这些Java的线程在分歧操纵体系调剂下运转的差别性也就对照分明。比方在Windows体系中,不但线程的优先级少于JavaAPI参数划定的十个优先级,并且微软明白否决程序员静态调剂线程优先级。即便在操纵体系中有充足的优先权,让线程优先级的参数和实在线程的优先级对应,分歧操纵体系的调剂体例也会有很多分歧。这终极会形成代码在分歧平台上的举动变得不成展望。这就很难满意庞大的、年夜范围并发义务的浩瀚优先级需求,从而很难到达用户营业必要到达的效果。
  2.因为在Java体系中,线程被包装在一个Java言语的对象类—Thread中,以是为了完成Java言语对象和操纵体系线程的对应,Java线程的体系开支仍是对照年夜的(在NT4.0中,均匀每一个线程大抵占用30KB内存)。因而假如让Thread对象个数和不计其数的义务数同比例增加,就明显是分歧理的。
  综上所述,依据并发多义务的年夜范围需乞降Java平台固有的特性,想要使用JavaThread对象的优先级调剂CPU资本的分派长短常坚苦的,以是应当只管制止让线程和义务间接对应,也只管制止利用操纵体系线程优先级的调剂机制。
  办理计划
  依据以上剖析,成绩的关键在于:多义务体系中的义务在Java言语中的对应和义务间的互相调剂。
  从实质上看,一个义务就是一系列对象办法的挪用序列,与Java的Thread对象大概其余类的对象没有一定接洽。在制止利用分歧操纵体系线程调剂且同时Java假造机又没有线程调剂才能的情形下,要想机关一个和谐式多义务体系,让各个义务互相共同就成了最间接的思绪。和谐式多义务体系一样平常有以下特性:
  1.义务由动静驱动,动静的呼应代码完成义务逻辑的处置;
  2.动静行列完成动静的存储和办理,从而使用动静处置的序次表现义务优先级的分歧;
  3.义务中耗时的动静呼应逻辑可以自动保持CPU资本,让其余义务实行(像Windows3.1中的Yield函数、VisualBasic中的DoEvents语句)。
  大概出于偶合,Java言语具有机关和谐式多义务体系自然的前提。Java对象的办法不但是一个函数挪用,它仍是一个java.lang.reflect.Method类的对象。而一切对象的办法都能够经由过程Method类的invoke办法挪用。假如能使每一个义务所对应的一系列办法全体以对象情势包装成动静,放到动静行列中,然后再依照本人的优先级算法将行列中的动静掏出,实行其Method对象的invoke挪用,那末一个基础的和谐式多义务体系就构成了。个中,义务的优先级和线程的优先级没有绑定干系。该体系的主体调剂函数能够设置成一个“逝世轮回”,依照必要的优先级算法处置动静行列。关于有多重轮回、外设守候等耗时操纵的动静呼应函数,能够在呼应函数外部递回挪用主体调剂函数,这一次挪用把本来的“逝世轮回”改成在动静行列长度削减到必定水平(大概为空)前进出。加入后,函数前往,实行方才没有完成的动静呼应逻辑,如许就十分天然地完成了和谐式体系中义务自动保持CPU资本的请求。
  假如仅仅做到这一步,完成一个像Windows3.1中的多义务体系,实践只用了一个线程,没有益用Java多线程的特性。应当注重到,固然Java体系中线程调剂与平台相干,可是不异优先级的线程之间分时运转的特性基础上是不受特定平台影响的。各个不异优先级的线程共享CPU资本,而线程又被映照成了Java言语中的Thread对象。这些对象就能够被以为是CPU资本的代表。Thread与线程实行代码主体的接口—Runnable之间是多对一的干系。一个Runnable能够被多个Thread实行。只需将Runnable的实行代码设置成上述的动静调剂函数,并和动静行列对应上,那末就能够经由过程把持为它服务的Thread个数来决意动静行列实行的快慢,而且在运转时能够静态地新增(new)和加入Thread对象。如许就可以恣意调剂分歧动静行列在实行时所占用CPU资本的几。至此,任何一个Java挪用都能够在Thread个数分歧的动静行列当选择,并能够调剂这些动静行列服务的Thread个数,从而完成在运转时调剂义务所占用的CPU资本。
  纵不雅全部计划,因为仅仅基于Java言语固有的Method对象,分歧义务间静态分派CPU资本并没有对义务的性子及其处置流程有任何限定,那末在动静行列中没有高优先级动静时,低优先级动静的处置函数天然会全体占用CPU资本。在分歧动静行列处置速率恣意设置时,并未将特定的动静限定在快的大概慢的动静行列上。假如体系的负荷超越(好比动静行列长度凌驾必定限定),只需将行列中低优先级动静换出大概回绝不克不及处置的动静进进,那末体系的运转就能够基础上不受负荷压力的影响,从而最年夜保证用户的关头营业需求。
  固然,和谐式多义务的头脑也有其范围性,次要就是它的调剂粒度对照年夜。体系可以包管的粒度是一次动静处置历程。假如动静处置逻辑十分费时,那末编程职员就必需再处置函数外部,让体系自动让出CPU资本。这固然必要在处置动静呼应逻辑时增添一个思索要素,可是,在Windows体系流行的明天,这是一个已被广泛承受的思绪。因为计划中并没有范围为动静行列服务的线程数量,以是一个长工夫的动静呼应只会影响一个线程,而不会对全部体系发生致命的影响。除调剂粒度的成绩之外,另有会见动静行列操纵在各个线程间互斥的成绩。掏出动静的历程是串行化的,因而关于这一瓶颈的办理计划就是:假定掏出一条动静的操纵相对处置动静的损耗能够疏忽不计,那末关于屡次挪用且唯一两三行呼应逻辑的动静,编程职员经由过程函数挪用就能够间接实行。
  后面对照具体地论述了多义务体系中义务的分别和实行等外容。固然这些是一个体系的中心,可是在一个有用的体系中,还必要义务间的同步、互斥等机制。在上述框架内,互斥能够复杂地用Java的Synchronized机制完成。因为义务能够自动让出实行权限,要完成守候(Wait义务中断)和关照(Notify义务持续),从而完成义务同步也就对照简单了。

其实你不用Struts,spring这些工具,直接用jsp,servlet能够很方便地写出来,而且,可以根据个人的水平、爱好,有很多方案。而struts,spring这些工具的出来。

分手快乐 发表于 2015-1-21 10:20:19

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。

蒙在股里 发表于 2015-1-21 11:39:12

学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。

小女巫 发表于 2015-1-21 16:50:57

学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。

透明 发表于 2015-1-26 22:40:27

当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?

乐观 发表于 2015-2-4 21:08:22

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

柔情似水 发表于 2015-2-10 10:59:04

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

山那边是海 发表于 2015-3-1 18:33:04

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

兰色精灵 发表于 2015-3-10 21:59:14

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!

再见西城 发表于 2015-3-17 11:02:08

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

莫相离 发表于 2015-3-17 16:33:30

Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)

小妖女 发表于 2015-3-18 03:07:21

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

仓酷云 发表于 2015-3-21 00:44:23

是一种使用者不需花费很多时间学习的语言

冷月葬花魂 发表于 2015-3-26 18:11:50

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

若天明 发表于 2015-3-28 18:36:52

那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!

不帅 发表于 2015-4-12 01:47:13

自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

活着的死人 发表于 2015-4-24 21:45:02

你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。

老尸 发表于 2015-5-5 22:43:21

一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从

爱飞 发表于 2015-6-10 00:00:09

是一种使网页(Web Page)产生生动活泼画面的语言
页: [1]
查看完整版本: JAVA网页编程之Java使用程序中静态的分派CPU资本仓酷云