Master
package master_worker; 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 Map<String, Object> resultMap = new ConcurrentHashMap<String, Object>(); // 是否子任务都结束了 public boolean isCompelete() { for (Map.Entry<String, Thread> entry : threadMap.entrySet()) { if (entry.getValue().getState() != Thread.State.TERMINATED) { return false; } } return true; } // Master构造,需要一个Worker进程逻辑,和需要Worker进程数量 public Master(Worker worker, int countWorker) { worker.setWorkQueue(workQueue); worker.setResultMap(resultMap); for (int i = 0; i < countWorker; i++) { threadMap.put(Integer.toString(i), new Thread(worker, Integer.toString(i))); } } // 提交一个任务 public void submit(Object job) { workQueue.add(job); } // 开始运行所有的Worker进程,进行处理 public void execute() { for (Map.Entry<String, Thread> entry : threadMap.entrySet()) { entry.getValue().start(); } } // 返回子任务结果集 public Map<String, Thread> getThreadMap() { return threadMap; } }
Worker
package master_worker; import java.util.Map; import java.util.Queue; public abstract class Worker implements Runnable { // 任务队列,用于取得子任务 protected Queue<Object> workQueue; // 子任务的处理结果 protected Map<String, Object> resultMap; @Override public void run() { while (true) { // 获取子任务 Object input = workQueue.poll(); if (input == null) break; // 处理子任务 Object result = handle(input); // 将处理结果放入结果集 resultMap.put(Integer.toString(input.hashCode()), result); } } // 子任务处理逻辑,在子类中实现具体逻辑 public abstract Object handle(Object input); public void setResultMap(Map<String, Object> resultMap) { this.resultMap = resultMap; } public void setWorkQueue(Queue<Object> workQueue) { this.workQueue = workQueue; } }
PlusWorker
package master_worker; public class PlusWorker extends Worker { public Object handle(Object input){ Integer i = (Integer)input; return i*i*i; } }
Test
package master_worker; import java.util.Map; import java.util.Set; public class Test { public static void main(String[] args) { Master master = new Master(new PlusWorker(), 10); for (int i = 0; i < 1000; i++) { master.submit(i); } master.execute(); int result = 0; Map<String, Object> resultMap = master.getResultMap(); while (resultMap.size() > 0 || !master.isCompelete()) { 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) { result += i; } if (key != null) { resultMap.remove(key); } } System.out.println(result); } }
相关推荐
ERROR in ./node_modules/vue-pdf/node_modules/pdfjs-dist/es5/build/pdf.worker.js (./node_modules/vue-pdf/node_modules/worker-loader/dist/cjs.js!./node_modules/vue-pdf/node_modules/pdfjs-dist/es5/build/...
结合 Etcd 与 MongoDB 实现一个基于 Master-Worker 分布式 架构的 crontab 系统.zip
# hadoop 192.168.1.151 name-node 192.168.1.155 data-node-sa 192.168.1.156 data-node-sb 192.168.1.157 data-node-sc spark conf/slaves worker-sa worker-sb worker-sc 待补充 。。。 hadoop etc/hadoop/...
Master-Worker模式的并行关联规则挖掘算法,苗锡奎,,随着信息技术迅速发展,数据库的规模不断扩大,从而产生了大量的数据。如果使用传统的数据挖掘技术从这庞大的数据中挖掘出有价值
lua-resty-worker-事件 Nginx工作进程的进程间事件 目录 register_weak 取消注册 安装 错误和补丁 作者 版权和许可 历史 也可以看看 地位 该库已准备就绪。 概要 http { lua_package_path "/path/to/lua-resty-...
用于《vue3中使用Web Worker多线程》这篇文章的项目Demo下载 文章地址:https://blog.csdn.net/weixin_42063951/article/details/125300644
前端开源库-web-worker-manager网络工人经理,工人经理
k8s集群v1.18.1一键安装 ...百度云 ...提取码:fr7r ...执行setup_worker.sh 安装 worker-node 参考文章:https://www.jianshu.com/p/d97885880252 参考github:https://github.com/scfido/k8s-offline-setup
1:首先下载libunwind-1.1 ... Ss 08:23 0:00 nginx: master process /usr/local/server/nginx/sbin/nginx www 23019 0.0 2.6 68816 27160 ? S 08:48 0:00 nginx: worker process ...
Laravel开发-laravel-worker-command Laravel 5的指挥装备员
Worker_threads示例Hẫngd worker_threads worker_threads NodeJs安装1.Càiđặtthưviện yarn 或者npm install2.Khởiđộng npm run start 或者yarn start 或者node main.js
用C#编写的master-worker并行任务系统 手动部署系统 您只需要源文件 克隆或下载此存储库 现在,您需要编译Master并启动它: 编译它 制作自己的config.json文件: { " wsport " : 6969 , " mainport " : 9696 , ...
用于《vue3中使用Web Worker多线程》这篇文章的项目Demo下载 文章地址:https://blog.csdn.net/weixin_42063951/article/details/125300644
第二部分 Master节点配置HA 5 第三部分 证书制作 8 第四部分 ETCD集群部署 14 第五部分 Master节点部署 16 第六部分 Node节点部署 24 第七部分 CoreDNS和Dashboard部署 37 第八部分 部署traefik Ingress 39 第一部分...
支持Node.js环境的捆绑工人入门yarn add rollup-plugin-web-worker-loader --dev将插件添加到汇总配置中: import webWorkerLoader from 'rollup-plugin-web-worker-loader' ;export default { entry : 'src/index....
- hostname : master1 type : master - hostname : master2 type : master - hostname : worker1 type : worker - hostname : worker2 type : worker $ docker run -it --rm \ -v $SSH_AUTH_SOCK :/ssh-agent ...
product/include/include_level0/drv/librrs_pub.h:_IO_WORKER_CALLBACK_PARA_S,IO_WORKER_CALLBACK_PARA_S searchname:IO_WORKER_CALLBACK_PARA_S product/include/include_level0/drv/librrs_pub.h:tagRRS_INT_...
命名实体识别代码,解压即可用 # BERT-BiLSTM-CRF BERT-BiLSTM-CRF的Keras版实现 ...- bert-serving-start -pooling_strategy NONE -max_seq_len 144 -mask_cls_sep -model_dir chinese_L-12_H-768_A-12/ -num_worker 1
介绍使用c++同步zookeeper客户端接口的Zookeeper master-worker实现Zookeeper C++ 客户端c++ 客户端实现基于zookeeper c 绑定客户端和boost。 与c-binding客户端相比,增加了一些便利:(1)所有客户端请求同步发送...