领略分布式编程乐趣--[5]

本文围绕Voyager展开,介绍了其在分布式对象计算中的应用。包括在客户端和服务器端启动Voyager运行时环境进行编程,实现远程对象创建与计算;阐述对象迁移的适用场景、关键问题及Voyager保证引用完整性的机制;还提及远程调用中同步和异步概念,以及用Voyager实现异步执行的方法。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

                     领略分布式编程乐趣

RedStar81 9/9/200313/9/2003
                                               81_RedStar81@163.com
                                               TomHornson.student@www.sina.com.cn

首次修改时间:13/9/2003
                         
个人文集:http://www.csdn.net/develop/author/netauthor/RedStar81/
                          WebLog: http://www.advogato.org/person/TomHornson/

 

方法C示例:

程序片断1:

这里只需在客户端编程.但是前提时客户端和服务器端都需要启动Voyager运行时环境.

 

//

//Project : RemoteObjectComplexComputing using voyager producted by objectspace

//Filenaem : Caller.java

//Creator And Date : RedStar81 2003-8-23 0:07

//

//Statement : It is uesd to test the conditons when pass a object !

//

 

import com.objectspace.voyager.*;

 

public class Caller{

 

public static void main(String[] args){

      

try{

    Voyager.startup();

    Computing computingObject = new Computing();

   

    IComputing iC = (IComputing)Factory.create("Computing",”OtherServer:9000”);

   

    double returnValue = (iC.computing(new ComputingObject(1,100000))).doubleValue();

    System.out.println(returnValue);   

 

}catch(Exception e)

{

       System.err.println(e);

}

    Voyager.shutdown();  

}

}

这样Factory就在远程服务器OtherServer上建立了远程对象,并且在本地使用远程对象进行计算.

 

3)对象的迁移

一般来说,在下面的场合我们需要对象迁移:

a当本地对象和服务器对象交互需要大量的通信.这个代价远远大于对象迁移的代价。
b移动设备的离线计算。

c支持工作流.在一个协作的工作流系统中,对象的迁移是合乎常理而有效力的做法。

d负载平衡。

  我们想想,在你接触的分布对象计算技术中,还没有哪种技术能够实现对象迁移吧。RMI?CORBA?DCOM?是的,都不能。

对象移动的关键问题就是保证引用完整性。我们设想,如果一个对象可能处于下面的任何一种或几种状态之中。a对象引用本地对象。b对象引用远程对象 c对象被本地引用 d对象是一个远程对象,被远程引用。很多这样的本地或是服务器端对象就会构成一个很复杂的引用关系网络。很显然,一个对象迁移后,需要解决引用迁移的问题,这是一个很复杂的问题。然而,有了Voyager,一切都变得简单。Voyager通过特殊的机制转发引用,自动复制本地引用对象等手段来保证引用完整性。

为了实现对象的迁移,首先使用Mobility.of()方法从一个对象创建层面对象,然后就可以通过moveTo方法实现迁移了.这个moveTo方法是重载,下面我们只介绍其中一种,更加详细的信息请参考VoyagerManual.

  程序清单1:

情景阐述:对象不断的移动,然而通过Voyager的引用处理机制,我们仍能够正常引用.

//

//Project : MobileObject

//Filename : IBall.java

//Creator And Date : RedStar81 2003-8-22 22:51

//

//Statement :

//

 

public interface IBall{

  public void hit();

}

 

//

//Project : MobileObject

//Filename : Ball.java

//Creator And Date : RedStar81 2003-8-22 22:51

//

//Statement :

//

 

import java.io.*;

 

public class Ball implements IBall,Serializable{

 

synchronized  public void hit(){

       System.out.pringln("Ball has been hit");

}

}

 

//

//Project : MobileObject

//Filename : IBall.java

//Creator And Date : RedStar81 2003-8-22 22:51

//

//Statement :

//

 

import com.objectspace.voyager.*;

import com.objectspace.voyager.mobility.*;

 

public class Bat{

public void play(IBall ball,String _url){

       try{

       ball.hit();

       Mobility.of(ball).moveTo(_url);

}catch(MobilityException e){

       System.out.pringln(e);

}

}

 

public static void main(String[] args){

       try{

       Voyager.startup("9000");

       ClassManager.enableResourceServer();

       Bat bat = new Bat();

       IBall ball = (IBall)Proxy.of(new Ball());

       bat.play(ball,"//OS1:9000");

       bat.play(ball,"//OS2:9000");

       bat.play(ball,"//OS3:9000");

}catch(Exception Exception){

       System.err.pringln(Exception);

}

Voyager.shutdown();

}

}

 

上面的程序需要解说的:

a由于Voyager是基于Java技术的,使用序列化技术,所以移动对象需要实现Serializable接口.

事实上,如果你希望你的移动对象能够在迁移的整个过程中,譬如移动前,移动后等处理一些其它的事情,你的移动对象除了实现Serializabe接口外,还需要实现IMobile.这些过程会被顺序调用.这个很像applet的情况。

 

5)远程调用

  同步和异步的概念在Socket编程中是一个很重要的概念.同步就是顺序执行,在上一个任务(函数)调用返回之前,不可以执行下面的任务(函数),也就是任务的执行采用阻塞的方式。而异步和之相反,不必等待前任务的完成,就执行下面的任务。一般来说,在实际中,我们需要解决异步C/S式编程的方式,而这不外乎三种:
a当服务请求来临时,启动新的线程来处理任务.

b采用轮询的方式来处理任务。

c回调。
可以这样说吧,三种方式都是异步处理解决方式。

在最后,下面我们会详细分析一个使用多线程和RMI来模拟并行高性能计算的实例。

同样的,在分布式对象计算中,我们的最终目标可以说就是方法的调用,这里也存在同步和异步的问题.当然,上面提及的三种方法都可以使用,不过基于Voyager,我们不需要自己来处理这些问题了,我们只需要将任务分成多个方法调用,然后Future类的静态方法invoke(object,”method”,new Object[]{param-list…})来执行它们就可以实现异步执行了。其中,object是执行方法所在的对象,method是执行的方法,param-list是传递给调用方法的列表.

当然了,这个invoke对于本地对象和远程对象都是适用的.

  这里手头没有现成的例子。值得提醒一下的是:invoke返回一个Result类型的对象,你可以通过isAvailable()来检测是否得到结果,没有得到的话,就进行其它的工作。当得到结果的时候,你可以通过readInt()或是redByte或是readObject()等来获得结果。你也可以通过其它重载的invoke方法来设定等待时间,设置回调函数等等。

 


待续:

 

2.    DCOM

3.    CORBA

4.       WebServices

5.         Sun RMI  VS. dotNET Remoting

6.         LindaSun JavaSpace ,IBM Tspace

7.         JINI

8.         Emerald VS. Dejay

9.         Pjama

10.     IBM Mobile Computing Interface : Aglets

.综合应用分析

1.       利用多线程和分布对象计算技术模拟高性能并行计算

2.       利用Vdejay计算几何分形图

 

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

打开链接下载源码: https://pan.quark.cn/s/bb4802fc03a0 在 VSCode 环境中构建开发平台及项目启动是至关重要的环节,对于开发者而言,熟练掌握这一环节能够显著提升开发工作的效率与成果。接下来,我们将详尽阐述如何构建 VSCode 开发环境并启动相关项目。 一、安装 Node.js 在着手构建 VSCode 开发环境之前,首要任务是安装 Node.js。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时平台,主要应用于服务器端应用程序的开发。获取 Node.js 可以通过访问其官方网站下载安装包,并依照指示逐步完成安装流程。安装结束后,可在开始菜单中键入 cmd,随后输入 node -v 和 npm -v 以验证安装是否成功。 二、安装 Vue 引入 Vue 的目的是为了运用 Vue.js 框架进行 web 应用程序的开发。Vue.js 是一种渐进式的 JavaScript 框架,专门用于构建 web 应用程序。安装 Vue 可以借助 npm 或 cnpm 等工具实现。关键在于安装 Vue 的命令行界面(CLI)工具,并使用 Vue init 命令来创建全新的 Vue 项目。 三、设置环境变量 设置环境变量的目的是确保 Node.js 和 npm 工具能够正常运行。需要调整 PATH 变量,将 Node.js 的安装路径加入到 PATH 变量中。此外,还需安装 cnpm 工具,以提升 npm 的安装效率。同时,也要安装 Vue 的 CLI 工具,并对其进行环境变量的配置。 四、构建项目 构建项目涉及使用 Vue init 命令来创建新的 Vue 项目。需要打开 Terminal 菜单,选择 new...
内容概要:本文详细介绍了一种基于贝叶斯网络的短期电能负荷预测方法,特别关注电力系统中不确定性因素(如风电出力波动、负荷随机变化等)对预测精度的影响。通过构建贝叶斯网络模型,有效捕捉输入变量之间的概率依赖关系与联合分布特性,实现了在复杂不确定环境下更高精度的负荷预测。该方法结合Python编程语言完成算法实现,提供了完整的代码支持,便于复现与扩展。相较于传统点预测模型,该方法能够输出负荷的概率分布与置信区间,增强了预测结果的风险评估能力,适用于现代含高比例可再生能源的电力系统运行决策。; 适合人群:具备一定电力系统基础知识、概率统计理论背景以及Python编程能力的科研人员、高校研究生、能源领域工程师及从事智能电网、能源预测等相关工作的技术人员。; 使用场景及目标:①应用于短期电能负荷预测任务,尤其适用于风电、光伏等新能源接入场景下量化源-荷双重不确定性影响;②为微电网调度、电力市场出清、需求响应策略制定及电网安全稳定分析提供具备风险评估能力的负荷输入数据;③帮助研究人员深入理解贝叶斯网络在能源时序预测中的建模流程,包括结构学习、参数估计与概率推理等关键技术环节。; 阅读建议:建议读者结合文中提供的Python代码进行动手实践,重点理解贝叶斯网络的构建过程与不确定性传播机制,可通过引入实际历史负荷与气象数据进行模型训练与验证,并与其他主流预测模型(如LSTM、GRU、XGBoost等)开展对比实验,以全面评估其在不同场景下的鲁棒性与优越性。
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 台达VFD037E43A变频器使用说明书包含了产品的基础安装、操作及维护等方面的全面信息,以下为其知识要点具体阐述: 1. 安全操作注意事项:在操作台达VFD037E43A变频器之前,说明书着重指出必须研读安全信息以保障操作人员与设备的双重安全。使用前应核实电源已切断,防止触碰带电线路,同时对内部电路板的静电防护措施也做了规定。此外,说明书还明确禁止非专业人员擅自改装变频器。 2. 接地规范:说明书说明了230V和460V系列变频器分别遵循第三类接地和特殊接地标准,从而确保了安全接地的合规性。 3. 安装与连接:说明书详尽说明了产品装置、搬运、接线方法、主回路端子及控制回路端子等环节,为用户正确配置和连接变频器提供了指导。 4. 零件选择:说明书内含零件选购参考,协助用户依据实际需求挑选适配的零件。 5. 参数调节:说明书中的“参数索引”及“参数深入解释”部分指导用户如何设定和调整变频器的运行参数。 6. 应用案例:在“成功实施案例”部分,说明书以实例形式向用户展示变频器在不同工作场景下的应用技巧。 7. 问题诊断:说明书提供了“警示代码解析”和“错误代码解析”,帮助用户识别变频器的常见故障并进行排除。 8. 通讯方式:说明书介绍了“CANopen通讯基础”和“BACnet应用指南及流程”,使用户能够掌握如何通过这些通讯方式将变频器融入工业自动化系统。 9. 特殊功能介绍:说明书还收录了“可编程逻辑控制器应用”和“PT100操作指南”,阐述了变频器的可编程逻辑控制器特性及温度传感器操作方法。 10. 网站与升级:说明书指出产品资料如有变动可通过台达电子工业自动化类产品的官方网...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值