简介
Master-Worker模式是常用的并行设计模式。它的核心思想是,系统有两个进程协议工作:Master进程和Worker进程。Master进程负责接收和分配任务,Worker进程负责处理子任务。当各个Worker进程将子任务处理完后,将结果返回给Master进程,由Master进行归纳和汇总,从而得到系统结果。处理过程如下图:
Master-Worker模式的好处是,它能将大任务分解成若干个小任务,并发执行,从而提高系统性能。而对于系统请求者Client来说,任务一旦提交,Master进程就会立刻分配任务并立即返回,并不会等系统处理完全部任务再返回,其处理过程是异步的。
Master-Worker模式结构
Master-Worker模式的主要结构如下图:
如上图所示,Master进程是主要进程,它维护着一个Worker进程队列、子任务队列和子结果集,Worker进程中的Worker进程不断的从任务队列中提取要处理的子任务,并将子任务的处理结果放入到子结果集中。
在上图中,Master:用于任务的分配和最终结果的合并;Worker:用于实际处理一个任务;客户端进程:用于启动系统,调度开启Master。
Master-Worker模式代码实现
Master代码实现:
import java.util.HashMap;
import java.util.Map;
import java.util.Queue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
public class Master {
//任务队列
protected Queue<Object> workQueue = new ConcurrentLinkedQueue<Object>();
//worker进程队列
protected Map<String, Thread> threadMap = new HashMap<String, Thread>();
//结果集(防止多线程同时读写出现线程安全问题)
protected ConcurrentHashMap<String, Object> resultMap = new ConcurrentHashMap<String,Object>();
/* 构造方法 */
public Master(Worker worker,int countWorker) {
worker.setResultMap(resultMap);
worker