`

Amino简单调度模式之 Master-Worker模式

 
阅读更多

在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

    标题中的"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

    标题中的"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

    标题中的"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

    标题中的"Amino.py-1.2.6-py3-none-any.whl.zip"是一个压缩文件,其中包含了Python的轮子(wheel)格式的库。在Python的生态系统中,轮子是一种预编译的二进制包,它使得安装Python包变得更加高效,避免了构建源代码...

    Amino.py-1.2.5-py3-none-any.whl.zip

    标题"Amino.py-1.2.5-py3-none-any.whl.zip"表明这是一个与Python相关的库,名为"Amino.py",版本号为1.2.5,且它被打包成一个wheel(whl)格式的文件。Wheel是Python社区为了简化安装过程而创建的一种预编译的...

    Amino.py-1.1.2-py3-none-any.whl.zip

    在本例中,它可能包含了如何将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

    标题"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

    标题"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.zip

    名称:Amino Live CSS Editor ---------------------------------------- 版本:4.0.6 作者:https://aminoeditor.com/ 分类:开发者工具 ---------------------------------------- 概述:使用实时CSS编辑器Amino...

    Amino.py-1.2.10-py3-none-any.whl.zip

    标题 "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

    标题"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

    标题"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

    标题中的"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-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

    标题中的"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

    标题中的"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

    标题 "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

    标题中的"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

    标题"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

    标题"Amino.py-1.2.2-py3-none-any.whl.zip"表明这是一个与Python相关的库或模块的压缩文件,版本号为1.2.2。".whl"是Python中的一个安装包格式,它是由Wheel项目提供的,用于简化Python软件包的分发和安装。".zip...

Global site tag (gtag.js) - Google Analytics