并行设计模式_Master-Worker_Future_生产者消-费者模型
来源:互联网 发布:图片源码是什么 编辑:程序博客网 时间:2024/05/21 17:36
关于并行设计模式-Master-Worker,future,
一.Master-Worker
1.一个pojo用于定义任务内容
package com.wpx.thread.demo05;public class Task {private Integer id;private String taskName;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getTaskName() {return taskName;}public void setTaskName(String taskName) {this.taskName = taskName;}}2.Master
package com.wpx.thread.demo05;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ConcurrentLinkedQueue;/** * Master-Worker模式 * aster-Worker模式是常用的并行计算模式,核心思想是由两类进程协作工作Master和Worker * *Master负责接收任务和分配任务,Worker负责处理子任务,当每个任务将结果返回geiMaster,由Master做归纳和总计 * 类似于一个包工头包了一块工程,找来多个工人一起完成,工人将工作汇报,包工头根据实际场景发个工资 * 好处:将一个大任务分解为若干个小任务,并行执行,从而提高系统的吞吐量 * @author wangpx * */public class Master {//承装任务的集合private ConcurrentLinkedQueue<Task> workQueue=new ConcurrentLinkedQueue<>();//承装所有worker对象private HashMap<String,Thread> works=new HashMap<>();//承装每一个Worker执行任务的结果集private ConcurrentHashMap<String,Object> resultMap=new ConcurrentHashMap<>(); //一个构造方法来统计workerpublic Master(Worker worker,int workerCount) {worker.setWorkerQueue(this.workQueue);worker.setResultMap(this.resultMap);for(int i=0;i<workerCount;i++) {//key表示一个worker的名字,value表示线程works.put("节点"+Integer.toString(i), new Thread(worker));}}//提交方法public void submit(Task task) {this.workQueue.add(task);}//一个执行方法,让所有的Worker工作public void excute() {for(Map.Entry<String, Thread> me: works.entrySet()) {me.getValue().start();}}//判断线程是否执行完毕public boolean isComplete() {for(Map.Entry<String, Thread> me: works.entrySet()) {if(me.getValue().getState() != Thread.State.TERMINATED) {return false;}}return true;}public List<Object> getResult(){List<Object> list=new ArrayList<>();for(Map.Entry<String, Object> me: resultMap.entrySet()) {list.add(me.getValue());}return list;}}3.Worker
package com.wpx.thread.demo05;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ConcurrentLinkedQueue;public class Worker implements Runnable{private ConcurrentLinkedQueue<Task> workQueue;private ConcurrentHashMap<String, Object> resultMap;public void setWorkerQueue(ConcurrentLinkedQueue<Task> workQueue) {this.workQueue=workQueue;}public void setResultMap(ConcurrentHashMap<String, Object> resultMap) {this.resultMap=resultMap;}@Overridepublic void run() {while(true) {Task input=this.workQueue.poll();if(input == null) break;//真正的去处理业务Object output=handle(input);this.resultMap.put(Integer.toString(input.getId()), output);}}private Object handle(Task input) {Object output=null;try {//处理业务耗时Thread.sleep(1000);output=input.getTaskName();} catch (InterruptedException e) {e.printStackTrace();}return output;}}
4.Main函数
package com.wpx.thread.demo05;/** * 10102任务88任务89任务90任务91任务92任务93任务94任务95任务96任务97任务10任务98任务11任务99任务12任务13任务14任务15任务16任务17任务18任务19任务1任务2任务3任务4任务5任务6任务7任务8任务9任务20任务21任务22任务23任务24任务25任务26任务27任务28任务29任务30任务31任务32任务33任务34任务35任务36任务37任务38任务39任务40任务41任务42任务43任务44任务45任务46任务47任务48任务49任务50任务51任务52任务53任务54任务55任务56任务57任务58任务59任务60任务61任务62任务63任务64任务65任务66任务67任务68任务69任务70任务71任务72任务73任务74任务75任务76任务77任务78任务79任务100任务80任务81任务82任务83任务84任务85任务86任务87 * @author wangpx */public class Main {public static void main(String[] args) {Master master =new Master(new Worker(), 10);for(int i=1;i<101;i++) {Task t=new Task();t.setId(i);t.setTaskName("任务"+i);master.submit(t);}master.excute();long start =System.currentTimeMillis();while(true) {if(master.isComplete()) {long result=System.currentTimeMillis()-start;System.out.println(result);master.getResult().stream().forEach(System.out::print);break;}}}}
阅读全文
0 0
- 并行设计模式_Master-Worker_Future_生产者消-费者模型
- Java程序性能优化 读书笔记(十四)并行设计模式:生产者-消费者模式
- 设计模式-生产者消费者模式
- 设计模式 - 生产者-消费者模式
- 设计模式--生产者消费者模式
- 设计模式-生产者消费者模式
- 不变模式,并行设计模式
- 架构设计:生产者/消费者模式
- 架构设计:生产者/消费者模式
- 架构设计:生产者/消费者模式
- 架构设计:生产者/消费者模式
- 架构设计:生产者/消费者模式
- 架构设计:生产者/消费者模式
- 架构设计:生产者/消费者模式
- 架构设计:生产者/消费者模式
- 架构设计:生产者/消费者模式
- 架构设计:生产者/消费者模式
- 架构设计:生产者/消费者模式
- 在 mingw-w64 中打包
- python生成验证码
- MIHH-HDU-2000---2009
- LINUX下搭建FTP服务器
- 【笔记】图的连通性
- 并行设计模式_Master-Worker_Future_生产者消-费者模型
- 日常运维-3
- Conditional mutual information 条件互信息
- HOJ P-2244 Get the Colors(模拟+贪心)
- solr5.5.5安装配置,数据库数据导入实现检索
- 渲染流水线
- [UE4]构建时候Swarm报错或无法启动的解决方法
- [UE4]Steam联机设置
- 如何带领项目团队按时高质量的完成交付