在Amino框架中为Master-Woker提供了较为完善的实现和便捷的操作接口。Amino实现了两套Master-Worker实现:一种是静态的Master-Worker实现,另外一种是动态的Master—Worker实现。
其中静态实现不允许在任务开始时添加新的子任务,而动态的Master-Worker允许在任务执行过程中,由Master或者Worker添加新的子任务。结构图如下所示:
其中:
Worker:用于实际处理一个任务;
Master:任务的分配和最终结果的合成;
Main:启动程序,调度开启Master。
下面看看静态的Master_Worker和动态的Master_Worker
静态:
import java.util.List; import java.util.Vector; import org.amino.pattern.internal.Doable; import org.amino.pattern.internal.MasterWorker; import org.amino.pattern.internal.MasterWorkerFactory; /** * * @author Administrator * 静态Master_Worker: * 需要实现Doable接口 */ public class Pow3 implements Doable<Integer, Integer>{ //计算立方和 public Integer run(Integer input) { // TODO Auto-generated method stub return input*input*input; } public static void main(String[] args) { MasterWorker<Integer, Integer> mw = MasterWorkerFactory.newStatic(new Pow3()); List<MasterWorker.ResultKey> keyList = new Vector<MasterWorker.ResultKey>(); for(int i=0;i<100;i++){ keyList.add(mw.submit(i)); // 提交任务 } mw.execute(); //执行任务 /** * 静态mw.execute()执行任务后不能继续添加,会报异常 */ for(int j=0;j<100;j++){ keyList.add(mw.submit(j)); } // int re=0; while(keyList.size()>0){ // Worker模式:不等待全部执行完毕,就开始求和, MasterWorker.ResultKey k = keyList.get(0); Integer i = mw.result(k); System.out.print("i="+i); if(i!=null){ re+=i; keyList.remove(0); //累加完成后,删除已处理的元素 System.out.println(",re="+re); } } System.out.println(re); } }
动态:
import java.util.List; import java.util.Vector; import org.amino.pattern.internal.DynamicWorker; import org.amino.pattern.internal.MasterWorker; import org.amino.pattern.internal.MasterWorkerFactory; import org.amino.pattern.internal.WorkQueue; import org.junit.Test; /** * * @author Administrator * 动态Master-Worker * 需要实现DynamicWorker接口 */ public class Pow3Dyn implements DynamicWorker<Integer, Integer>{ // 任务用于计算立方和 public Integer run(Integer w, WorkQueue<Integer> wq) { // TODO Auto-generated method stub return w*w*w; } @Test public void testPow3Dyn(){ MasterWorker<Integer, Integer> mw = MasterWorkerFactory.newDynamic(new Pow3Dyn()); List<MasterWorker.ResultKey> keyList = new Vector<MasterWorker.ResultKey>(); for(int i=0;i<50;i++){ keyList.add(mw.submit(i)); //提交任务 } mw.execute(); //计算任务 /** * 在已经开始执行任务的情况下,即执行完mw.execute()方法后,还可以继续添加,如果是静态模式,则不能继续添加 */ for(int i=50;i<100;i++){ keyList.add(mw.submit(i)); } int re=0; while(keyList.size()>0){ MasterWorker.ResultKey k = keyList.get(0); Integer i = mw.result(k); // key--value形式,通过k获取value i System.out.print("i="+i); if(i!=null){ re+=i; keyList.remove(0); System.out.println(",re="+re); } } System.out.println(re); } }
总结:
Master-Worker模式是一种将串行任务并行化的方案,被分解的子任务在系统中可以被并行处理,同时,Master进程不需要等待所有子任务都完成计算,就可以根据已有的部分结果集计算最终结果集。
相关推荐
标题中的"Amino.py-1.2.17-py3-none-any.whl.zip"是一个Python软件包的压缩文件,主要用于分发和安装Python模块。它包含了一个名为"Amino.py"的Python库,版本号为1.2.17。这个库可能是一个用于处理氨基酸序列或者与...
标题中的"Amino.py-1.2.11-py3-none-any.whl.zip"是一个Python软件包的压缩文件,它遵循Python的wheel格式。Wheel是Python的二进制包分发格式,旨在解决Python的安装过程中的依赖问题,提供更快的安装速度。"Amino....
标题中的"Amino.py-1.2.1-py3-none-any.whl.zip"是一个Python软件包的压缩文件,其中包含了名为"Amino.py-1.2.1-py3-none-any.whl"的Wheel格式的Python库。Wheel是Python社区推荐的一种预编译的包分发格式,它旨在...
标题中的"Amino.py-1.2.6-py3-none-any.whl.zip"是一个压缩文件,其中包含了Python的轮子(wheel)格式的库。在Python的生态系统中,轮子是一种预编译的二进制包,它使得安装Python包变得更加高效,避免了构建源代码...
标题"Amino.py-1.2.5-py3-none-any.whl.zip"表明这是一个与Python相关的库,名为"Amino.py",版本号为1.2.5,且它被打包成一个wheel(whl)格式的文件。Wheel是Python社区为了简化安装过程而创建的一种预编译的...
在本例中,它可能包含了如何将Amino.py集成到Python项目中的步骤,或者对库功能和API的简单介绍。 2. **Amino.py-1.1.2-py3-none-any.whl**:这是主要的Python软件包,用户可以使用pip命令进行安装。例如,他们可以...
标题"Amino.py-1.2.3-py3-none-any.whl.zip"表明这是一个与Python相关的软件包,其中包含一个名为"Amino.py"的模块,版本号为1.2.3,适用于Python 3环境。".whl"是Python的 Wheel 格式,它是预编译的Python软件包,...
标题"Amino.py-1.2.8-py3-none-any.whl.zip"表明这是一个与Python相关的库文件,名为"Amino.py",版本号为1.2.8,它被打包成一个wheel(whl)格式的文件,适用于Python 3环境,且不依赖于特定的系统架构(none-any)...
名称:Amino Live CSS Editor ---------------------------------------- 版本:4.0.6 作者:https://aminoeditor.com/ 分类:开发者工具 ---------------------------------------- 概述:使用实时CSS编辑器Amino...
标题 "Amino.py-1.2.10-py3-none-any.whl.zip" 提供的是一个Python软件包的压缩文件,它包含了Amino.py的一个特定版本(1.2.10)。描述同样简单,重复了标题的信息。标签“whl”表明这个文件是Python Wheel格式,这...
标题"Amino.py-1.2.7-py3-none-any.whl.zip"表明这是一个与Python相关的库或模块的压缩文件,版本号为1.2.7。".whl"是Python中的一个安装包格式,它是由 Wheel 格式的文件经过.zip压缩而来的。这种格式的文件通常...
标题"Amino.py-1.2.16-py3-none-any.whl.zip"指的是一个Python软件包,它被压缩在ZIP格式的文件中。这个包的名称是"Amino.py",版本号为"1.2.16",并且它是为Python 3编写的。".whl"扩展名是Python的 Wheel 格式,这...
标题中的"Amino.py-1.1.8-py3-none-any.whl.zip"是一个Python软件包的压缩文件,其中包含了名为"Amino.py"的库在版本1.1.8下的可分发文件。这个文件是用`.zip`格式封装的,意味着它是一个归档文件,用于集中存储多个...
标题"Amino.py-1.2.11.7-py3-none-any.whl.zip"指出,这是一款名为Amino.py的Python软件包的压缩文件,版本号为1.2.11.7。该文件使用了ZIP格式进行压缩,通常用于在Python环境中分发和安装第三方库。"whl"标签进一步...
标题中的"Amino.py-1.2.11.8-py3-none-any.whl.zip"表明这是一个Python软件包,名为"Amino.py",版本号为1.2.11.8,采用的是.whl格式,它是Python的_wheel_格式文件,这种格式用于方便安装Python包。"py3-none-any...
标题中的"Amino.py-1.2.4-py3-none-any.whl.zip"是一个Python软件包的压缩文件,其中包含了"Amino.py"的1.2.4版本。这个包是用Python 3编写的,适用于任何平台("none"表示它不依赖特定的硬件或操作系统),并且它是...
标题 "Amino.py-1.2.11.5-py3-none-any.whl.zip" 暗示了这是一个Python库的压缩包,名为"Amino.py",版本号为1.2.11.5,它被封装在一个`.whl`格式的文件中,而`.whl`文件又被进一步压缩成`.zip`格式。`.whl`是Python...
标题中的"Amino.py-1.2.7.4-py3-none-any.whl.zip"是一个Python软件包的压缩文件,其中包含了一个名为"Amino.py"的模块,版本号为1.2.7.4,适用于Python 3环境,且不依赖特定的硬件架构或操作系统。"whl"是Python的...
标题"Amino.py-1.2.0-py3-none-any.whl.zip"表明这是一个与Python相关的软件包,其中包含了"Amino.py"的1.2.0版本。".whl"是Python的Wheel文件格式,它是预编译的Python包,用于简化安装过程,避免了在用户系统上...
标题"Amino.py-1.2.2-py3-none-any.whl.zip"表明这是一个与Python相关的库或模块的压缩文件,版本号为1.2.2。".whl"是Python中的一个安装包格式,它是由Wheel项目提供的,用于简化Python软件包的分发和安装。".zip...