当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:15:00  来源:本站整理

构建自己的基于Java的超级计算机[Java编程]

赞助商链接



  本文“构建自己的基于Java的超级计算机[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

假如您曾想过构建自己的超级计算机,但却对用C语言举行并行编程望而生畏,那么伪远程线程可以帮您办理这一问题.这种获奖的Java编程模子极大地简化了集群上的并行编程,并使超级计算走出实行室,使每一位 Java 程序员都能利用它.

在过去的三年里,并行集群已在改变着超级计算的面目.一旦代价数百万美圆的单体机占了主导,并行集群很快就会成为超级计算机的挑选.可以想像得到,开放源码圈内的高涨热忱已招致产生了数百 -- 假如不是数千的话 -- 并行集群项目.第一个同时也是最闻名的开放源码集群系统是 Beowulf.在NASA 赞助下,由 Thomas Sterling和Donald Becker 在1994 年公布的Beowulf,开始是作为一个 16 节点演示集群推出的.本日,Beowulf 已有数百种实现,从Oak Ridge 国家实行室的Stone SouperComputer到Aspen 系统公司的定制构建的商业性集群(请参阅参考资源).

对 Java 程序员不利的是,大都集群系统都是环绕基于C语言的软件消息传送 API — 如消息传送接口(MPI)或并行虚拟机(PVM)— 来实现的.用C语言举行并行编程不是件简单的事,因此我计划了一个替换筹划.本文将阐明若何综合应用Java 线程和 Java 远程办法调用(RMI)来成立自己的基于Java的超级计算机.

请注意,本文假定您有 Java 线程和 RMI的利用知识.

超级计算机内有什么?

超级计算机的定义是:由八个或更多的节点构成、作为单个高性能机械工作的集群.基于Java的超级计算机包含一个功课调度器和肆意数目的运行服务器(也称为主机).功课调度器生成多个线程,每个线程包含履行差别子任务的代码.各个线程将其代码迁移到差别的运行服务器上.然后,每个运行服务器履行迁移给它的代码并将后果返回给功课调度器.最后,功课调度器将各个线程的后果组合起来.

这种并行集群系统之所以被称为伪远程线程,是因为线程是在功课调度器上调度的,但线程内的代码倒是在远程计算机上履行的.

该系统有哪些组件?

组件一词是指构成“伪远程线程”并行集群系统的逻辑模块.该系统包含以下组件:

Job dispatcher(功课调度器) 是履行掌握的机械.它生成差别的线程,每个线程都包含此集群要处理的主任务的一个子任务.每个线程内的代码都被发送到一台远程计算机去履行.线程在功课调度器上调度,所以理论上讲,该机械不该该用于履行任何子任务.

SubTask 是一个用户定义类,该类定义主任务的一个数据或功效独立的部份.您可认为主任务的差别部份定义差别的类.类名 SubTask 是一个示例.您可认为一个 SubTask类取任何名字,不过这个名字应当能描写分配给它的子任务.在定义SubTask类时,您必须实现JobCodeInt接口以及 jobCode()办法,下面对其举行阐明.

JobCodeInt 是一个 Java接口.您必须在定义子任务的类中实现该接口和 jobCode()办法.jobCode()办法描写了将在远程履行的代码.假如您打算在远程利用某个本地资源,您必须在jobCode()办法外部初始化这个资源.比方说,您要将一组图象发送到远程处理,就必须在jobCode()办法外部初始化 Image 对象.您可以在该办法中调用尺度 Java 库中的类,因为远程计算机上存在这些库.

RunServer 是一个 Java 对象,该对象答应远程历程调用其办法.它的一个办法以实现了JobCodeInt接口的对象作为参数. RunServer 就在运行该对象的计算机(运行服务器)上履行该对象内的代码,并将计算后果作为 Object类的一个实例返回.Object 是 Java类层次构造中最高一级的类.

PseudoRemThr 是一个 Java类,该类封装了一个线程并承受给定 SubTask类的一个实例.它挑选一台远程主机,并将 SubTask 实例发送到这台主机上履行.假如您要操纵某台主机上可用的特定资源(诸如数据库或是打印机),则可以指定主机.

HostSelector 是一个模块.假如您没有指定远程主机,PseudoRemThr类就会调用HostSelector 模块来挑选特定的主机.假如没有闲暇的主机,HostSelector 会返回负载最小的远程计算机.假如某个远程计算机是一个多处理器系统,HostSelector 大概会不止一次地返回该主机名.目前,HostSelector 无法按照给定任务的复杂程度来挑选主机.

伪远程线程的工作方法

要利用伪远程线程,您必须实现功课调度器和运行服务器.本节将阐明若何实现各个部份.

实现功课调度器

首先,将主任务分化为数据或功效独立的子任务.针对每个子任务,定义一个实现JobCodeInt接口(从而实现jobCode()办法)的类.在jobCode()办法中,定义各给定子任务要履行的代码.

请注意,您不能调用功课调度器上用户定义的的本地资源.请在该办法外部初始化全部这类资源.比方,您可以在SubTask类的构造函数中初始化这类资源.

成立类 PseudoRemThr的若干实例,并将 SubTask的实例传送给 PseudoRemThr的各个实例.假如您要明确指定一台远程主机,您可以通过调用PseudoRemThr 对象的另一个构造函数来完成.

等候这些线程完成.调用getResult()办法来获得 PseudoRemThr的各个实例的履行后果.假如计算没有完成,后果返回一个值为 false的Boolean 对象;不然,将返回 Object类的一个实例,此中包含了计算后果.您必须将此实例转换为您所但愿的类范例.将全部的子任务后果组合为终究后果.

实现运行服务器

实现运行服务器是一项简单的工作:

启动 RMI 注册程序.

启动 RunServer.

运行服务器在启动时接通功课调度器,并告诉功课调度器它已预备就绪,可以承受要履行的任务了.


  以上是“构建自己的基于Java的超级计算机[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 利用mydns构建自己的DNS服务器
  • 构建自己的基于Java的超级计算机
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .