多线程模式之MasterWorker模式

Master-Worker模式的核心思想是,系统由两类进程协作工作:Master进程和Worker进程。Master进程负责接收和分配任务,Worker进程负责处理子任务。当Worker进程将各个子任务处理完成后,将结果返回给Master进程,由Master进程做归纳和汇总。

工作示意图如下图所示:

它的优势在于将一个大的任务分解成一个个的子任务并行执行,提高程序执行效率。

代码示例:

Master进程类:

public class Master {

protected Queue<Object> workQueue = new ConcurrentLinkedQueue<Object>();//存放子任务

protected Map<String,Thread> threadMap = new HashMap<String,Thread>();//存放Worker线程

protected Map<String,Object> resultMap = new ConcurrentHashMap<String, Object>();//存放返回结果集

public boolean isCompleted(){

for(Map.Entry<String,Thread> entry:threadMap.entrySet()){

if(entry.getValue().getState() != Thread.State.TERMINATED){

return false;

}

}

return true;

}

public Master(Worker worker,int countWorker){

worker.setWorkQueue(workQueue);

worker.setResultMap(resultMap);

for(int i=0;i<countWorker;i++){//创建多个Worker线程

threadMap.put(Integer.toString(i),new Thread(worker,Integer.toString(i)));

}

}

public void submit(Object job){

workQueue.add(job);//将任务加到子任务队列中

}

public Map<String,Object> getResultMap(){

return resultMap;

}

public void execute(){

//循环启动Worker线程

for(Map.Entry<String,Thread> entry:threadMap.entrySet()){

entry.getValue().start();

}

}

}

Worker进程类:

public class Worker implements  Runnable{

protected Queue<Object> workQueue;

protected Map<String,Object> resultMap;

public void setWorkQueue(Queue<Object> workQueue){

this.workQueue = workQueue;

}

public void setResultMap( Map<String,Object> resultMap){

this.resultMap = resultMap;

}

public Object handle(Object input){

return input;

}

public void run(){

while(true){

Object input = workQueue.poll();//从子任务中取任务执行

if(input == null) break;

Object re = handle(input);//这是一个模板方法模式

resultMap.put(Integer.toString(input.hashCode()),re);

}

}

}

PlusWorker进程类:

public class PlusWorker extends Worker {

public Object handle(Object input){

Integer i = (Integer)input;

return i*i*i;

}

}

测试类:

public class Main {

public static void  main(String[] args){

Master m = new Master(new PlusWorker(),5);

for(int i=0;i<100;i++)

m.submit(i);

m.execute();

int re = 0;

Map<String,Object> resultMap = m.getResultMap();

while(resultMap.size() >0 || !m.isCompleted()){

Set<String> keys = resultMap.keySet();

String key = null;

for(String k:keys){

key = k;

break;

}

Integer i = null;

if(key != null)

i = (Integer)resultMap.get(key);

if(i != null)

re += i;

if(key != null)

resultMap.remove(key);

}

System.out.println("re:"+re);

}

}

Main不用等所有的Worker线程都计算完以后再执行,只要有计算完成的,它就一直计算。

《Java性能优化》 -葛一鸣

时间: 2024-08-06 01:52:02

多线程模式之MasterWorker模式的相关文章

多线程模式之Master-Worker模式

Master-Worker模式的核心思想是,系统由两类进程协作工作:Master进程和Worker进程.Master进程负责接收和分配任 务,Worker进程负责处理子任务.当Worker进程将各个子任务处理完成后,将结果返回给Master进程,由Master进程做归纳和汇总. 工作示意图如下图所示: 它的优势在于将一个大的任务分解成一个个的子任务并行执行,提高程序执行效率. 代码示例: Master进程类: public class Master { protected Queue<Objec

Java之多线程中的Master-Worker模式

该模式的好处是,将大任务拆解成若干小任务并并行执行,从而提高系统吞吐量. 定义Worker进程,负责处理实际任务. /*具体工作对象*/static abstract class Worker<T, R> implements Runnable { private static final UtilsLog lg = UtilsLog.getLogger(Worker.class); protected Queue<T> workQueue;//持有Master的任务队列 prot

并行设计模式(二)-- Master-Worker模式

Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Master-Worker模式,关于其他多线程设计模式的地址如下: 关于Future模式的详解:并行设计模式(一)-- Future模式 关于Guarded Suspeionsion模式的详解:并行设计模式(三)-- Guarded Suspeionsion模式 关于不变模式的详解:并行设计模式(四)--

Java多线程编程中Future模式的详解&lt;转&gt;

Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker模式.Guarded Suspeionsion模式.不变模式和生产者-消费者模式等.这篇文章主要讲述Future模式,关于其他多线程设计模式的地址如下:关于其他多线程设计模式的地址如下:关于Master-Worker模式的详解: Java多线程编程中Master-Worker模式的详解关于Guarded Suspeionsion模式的详解: Java多线程编程中Guarded Suspeionsion模式

Java Master-Worker模式实现

Master-Worker模式简介 Master-Worker模式是非常经典的常用的一个并行计算模式,它的核心思想是2类进程协作工作:Master进程和Worker进程.Master负责接收客户端请求,分配任务:Worker负责具体处理任务.当各个Worker处理完任务后,统一将结果返回给Master,由Master进行整理和总结.其好处是能够将一个大JOB分解成若干小JOB,并行执行,从而提高系统的吞吐量.比如流行的Web Server,如Nginx,Apache HTTP都存在这种Maste

Java多线程Master-Worker模式

Java多线程Master-Worker模式,多适用于需要大量重复工作的场景中. 例如:使用Master-Worker计算0到100所有数字的立方的和 1.Master接收到100个任务,每个任务需要0到100中每个数字的立方,这里为了效果,每个任务再sleep一秒, Master需要将这些任务放到一个支持高并发的非阻塞队列queue中如:ConcurrentLinkedQueue<E>. 2.Master创建10个worker去执行这100个任务,并准备一个支持高并发且线程安全的hashMa

多线程:多线程设计模式(三):Master-Worker模式

Master-Worker模式是常用的并行模式之一,它的核心思想是,系统有两个进程协作工作:Master进程,负责接收和分配任务:Worker进程,负责处理子任务.当Worker进程将子任务处理完成后,结果返回给Master进程,由Master进程做归纳汇总,最后得到最终的结果. 一.什么是Master-Worker模式: 该模式的结构图: 结构图: Worker:用于实际处理一个任务: Master:任务的分配和最终结果的合成: Main:启动程序,调度开启Master. 二.代码实现: 下面

Master-Worker模式

Master-Worker模式是常用的并行计算模式.它的核心思想是系统由两类进程协作工作:Master进程和woker进程.Master负责接收和分配任务,Worker负责处理子任务.当各个Worker子进程处理完成后,会将结果返回给Master,由Master做归纳和总结.其好处是能够将一个大任务分解成若干个小任务,并行执行,从而提高系统的吞吐量. 下面看一下具体的实现,然后在对比一下上面的图形:

java并发编程之Master-Worker模式

Master-Worker模式适合在一个任务可以拆分成多个小任务来进行的情况下使用. package cn.fcl.masterworker; import java.util.HashMap; import java.util.Map; import java.util.Queue; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; public c