并发编程之Master-Worker模式

并发模型(二)——Master-Worker模式 Master-Worker模式是 阅读详情

Master-Worker模式是常用的并发模式,核心是Master和Worker两个进程,Master接收和分配任务,各个Worker执行任务并返回结果,由Master来归纳和总结。好处是能将大任务分解为若干个小任务,提高系统的吞吐量。
这里写图片描述
代码示例:

public class Master {

    // 1.接收任务的queue
    private ConcurrentLinkedQueue<Task> taskQueue;

    // 2.管理worker的map
    private HashMap<String, Thread> workers;

    // 3.存储worker处理完的结果的map
    private ConcurrentHashMap<String, Object> resultSet;

    // 4.构造函数,构造workers
    public Master(Worker worker, int workCount) {

        taskQueue = new ConcurrentLinkedQueue<Task>();
        workers = new HashMap<String, Thread>();
        resultSet = new ConcurrentHashMap<String, Object>();

        worker.setTaskQueue(taskQueue);
        worker.setResultSet(resultSet);

        for (int i = 0; i < workCount; i++) {
            workers.put("worker"+i, new Thread(worker));
        }
    }

    // 5.接收任务
    public void submit(Task task) {
        taskQueue.add(task);
    }

    // 6.执行任务
    public void execute() {
        for (Entry<String, Thread> work : workers.entrySet()) {
            work.getValue().start();
        }
    }

    // 7.判断所有任务是否执行完成
    public boolean isCompleted() {
        for (Entry<String, Thread> work : workers.entrySet()) {
            if(work.getValue().getState() != Thread.State.TERMINATED) {
                return false;
            }
        }
        return true;
    }

    // 8.返回结果
    public long getResult() {
        long result = 0;
        for (Entry<String, Object> task : resultSet.entrySet()) {
            result += (int)task.getValue();
        }
        return result;
    }
}
public class Worker implements Runnable {

    private ConcurrentLinkedQueue<Task> taskQueue;
    private ConcurrentHashMap<String, Object> resultSet;

    public void setTaskQueue(ConcurrentLinkedQueue<Task> taskQueue) {
        this.taskQueue = taskQueue;
    }

    public void setResultSet(ConcurrentHashMap<String, Object> resultSet) {
        this.resultSet = resultSet;
    }

    @Override
    public void run() {
        // 循环地从taskQueue中取出任务,并执行,直到任务队列为空
        while(true) {
            // 取出任务并从队列移除该任务
            Task task = taskQueue.poll();

            if(task == null) break;

            handle(task);
        }
    }

    public void handle(Task task) {
        int result = task.getId();
        try {
            // 模拟执行任务消耗的时间
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        resultSet.put(String.valueOf(task.getId()), result);
    }
}
public class Test {

    public static void main(String[] args) {

        Master master = new Master(new Worker(), 20);

        for (int i = 0; i < 100; i++) {
            Task task = new Task();
            task.setId(i+1);
            task.setName("任务"+i+1);
            // 提交任务
            master.submit(task);
        }

        long start = System.currentTimeMillis();
        // 执行任务
        master.execute();

        while(true) {
            if(master.isCompleted()) {

                long end = System.currentTimeMillis();

                long result = master.getResult();
                System.out.println("结果为:" + result + ",所用时间:" + (end-start));

                break;
            }
        }
    }
}

1、Master拥有一个任务队列,一个Worker组和一个结果集
2、每个Worker能操作任务队列和结果集,因为需要从任务队列中取任务,以及结果存放到结果集中

总结:

Master-Worker模式是一种将串行任务并行化的方案,被分解的子任务在系统中可以被并行处理,同时,如果有需要,Master进程不需要等待所有子任务都完成计算,就可以根据已有的部分结果集计算最终结果集。

【MNE脑电信号处理学习笔记1】数据的读取、可视化、剪裁、滤波和保存 MNE之读取原始数据、可视化数据、剪裁数据、滤波和保存 Reading & visualizaing raw data, cropping, filtering, and saving 原视频教程:Pybrain: M/EEG analysis with MNE Python 原笔记和材料:pybrain_mne 本文根据视频和个人理解对原笔记进行细微修改。 Import the few packages we’ll need import matplotlib import pathlib i 阅读详情

相关推荐

CST仿真微带贴片天线学习笔记

谐振频率为3.48GHz,基板采用Rogers RT5880板材,介电常数2.2,损耗角正切0.0009,厚度1.57mm,馈电方式为同轴馈电。

qq_36521926的博客 9431

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

在Amino框架中为Master-Woker提供了较为完善的实现和便捷的操作接口。Amino实现了两套Master-Worker实现:一种是静态的Master-Worker实现,另外一种是动态的Master—Worker实现。  其中静态实现不允许在任务开始时添加新的子任务,而动态的Master-Worker允许在任务执行过程中,由Master或者Worker添加新的子任务。结构图如下所示:...

xinglei200909931的博客 659

别再写爬虫了!用Trae平台5分钟搞定一个能聊天的网页数据抓取Agent

本文介绍了如何利用Trae平台快速构建无需编程的网页数据抓取智能体,实现对话式数据采集。通过自然语言指令,用户可在5分钟内完成从数据抓取到分析的全流程,显著降低技术门槛和维护成本。文章详细解析了Trae智能体的核心能力,包括自然语言理解、智能页面解析、数据清洗和可视化配置,并提供了多个实战案例,展示其在竞品监控和舆情分析中的高效应用。

weixin_29038303的博客 717

多线程之Master-Worker工作模式学习

Master-Worker设计模式介绍 Master-Worker模式是常用的并行设计模式。核心思想是,系统由两个角色组成,Master和Worker,Master负责接收和分配任务,Worker负责处理子任务。任务处理过程中,Master还负责监督任务进展和Worker的健康状态;Master将接收Client提交的任务,并将任务的进展汇总反馈给Client。各角色关系如下图

我是个少年的博客 4320

Kriging代理模型理论相关推导

代理模型,Kriging,加点准则

森屹的博客 1万+

别再只看读写速度了!聊聊手机闪存eMMC、UFS3.1和SSD背后的功耗与体积玄学

本文深入探讨手机闪存技术eMMC、UFS3.1和SSD在功耗与体积设计上的关键差异。通过对比接口技术、封装工艺和温度管理,揭示移动存储如何在有限空间内平衡性能与能效,为消费者提供选购参考。重点关注UFS3.1的差分信号设计和全双工架构带来的显著优势。

weixin_27061475的博客 445

并发编程设计之Master-Worker模式

简介 Master-Worker模式是常用的并行设计模式。它的核心思想是,系统有两个进程协议工作:Master进程和Worker进程。Master进程负责接收和分配任务,Worker进程负责处理子任务。当各个Worker进程将子任务处理完后,将结果返回给Master进程,由Master进行归纳和汇总,从而得到系统结果。处理过程如下图: Master-Worker模式的好处是,它能将大任务分解成若...

.... 永远年轻,永远热泪盈眶 1万+

3D视觉入门必看:深度图、点云图、IR图、RGB图像到底有什么区别?

本文深入解析了3D视觉中深度图、点云图、IR图与RGB图像的核心区别。深度图记录像素距离,是连接2D与3D的桥梁;点云图是显式的三维坐标集合;IR图感知红外光强度;RGB图像则提供颜色纹理。理解其信息维度和应用场景,是进行机器人导航、三维重建等任务的基础。

year5的博客 342

并发设计模式之Master-Worker模式

Master-Worker模式是常用的并行模式之一。它的核心思想是,系统由两类进程协作工作:Master进程和Worker进程。Master进程复杂接受和分配任务,Worker进程负责处理子任务。当各个Worker进程将子任务处理完成后,将结果返回给Master进程,由Master进程做归纳和汇总,从而得到系统的最终结果,其处理过程如图 Master-Worker模式的好处是,它能够

柳婼 の blog 2199

【实战学习(五)】开源项目学习之uWSGI的部署以及配合nginx

文章目录1)uWSGI是什么?1.1 WSGI1.1.1 Application端1.1.2 Server端1.1.3 WSGI中间件1.2 uwgi1.3 uWSGI、WSGI、uwsgi之间的关系*为什么有了uWSGI为什么还需要nginx?2)连接uwsgi和Django*避坑之Windows10安装uWSGI非常极其艰难,最好勿浪费时间,直接转战Linux吧:2.1 uWGI部署2.1.1 在虚拟环境下安装uwsgi:2.1.2 测试uWSGI的运行2.1.3 使用uWSGI运行Django项目2.

黑黑白白君的博客 1507

Coze智能体开发:扣子空间制作PPT功能

扣子空间内置了丰富的场景模板,涵盖人文历史、学术分享、研究报告、数据分析等场景,可以满足不同用户的需求。 你只需输入与制作 PPT 相关的提示词,Agent 就能基于这些提示词展示思考的过程,并自动生成完整的 PPT。

王国平的博客 2052

并发编程:Master-Worker模式

一、Master-Worker模式 Master-Worker的工作机制就是Master接收到了一个任务,对任务进行拆分,并且分配给各个Worker,让各个Worker之间各自运行各自的子任务,最后Worker们的返回结果交给Master进行汇总并且最后返回给任务的发起方. Master-Worker是一种并行模式,Master是主要进程,Master中有维护着一个Worker进程队列.Mas...

zdj18166896501的博客 314

uniapp - 解决控制台提示“同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示”,uniApp安卓/苹果App真机运行调试显示同步资源失败,无任何授权提示且无法连接

uni-app,报错,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,提示错误解决,HbuilderX,uniapp同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示同步失败,安卓基座调试,没有反应,真机没有提示怎么办,如何解决这个问题,苹果ios手机,电脑模拟器运行,adb连接,连接失败,报错出错,uniapp真机运行的时候显示同步资源失败,未得到同步资源的授权,plugins里面没有tools,找不到tools,还是不行,重新打基座

🏆 前端领域优质创作者 1万+

并发编程Master-Worker模式

简介   Master-Worker模式是常用的并行设计模式。它的核心思想是,系统有两个进程协议工作:Master进程和Worker进程。Master进程负责接收和分配任务,Worker进程负责处理子任务。当各个Worker进程将子任务处理完后,将结果返回给Master进程,由Master进行归纳和汇总,从而得到系统结果。处理过程如下图: Master-Worker模式的好处是,它能将大任务...

菜鸟腾飞 557

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

并发编程之Master-worker模式

1、master package com.ming.mw; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; /** * @Auther: ex_che...

小猪奋斗 283

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【并发编程】Master-Worker模式

Master-Worker模式是常用的并行计算模式 核心思想是系统由两类进程协作工作:Master进程和Worker进程。Master进程负责接收和分配任务,Worker负责处理子任务。当各个Worker子进程处理完成后 会将结果返回给Master 由Master做归纳和总结 其好处是能一个大任务分解成若干个小任务 并行执行 从而提高系统的吞吐量。 示例: ConcurrentLinkedQue...

sdaujsj1的博客 230

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

delphi生产者消费者模式代码_并发编程模式(future,Master-Worker,生产者消费者模式)...

一、future模式在网上购物时,提交订单后,在收货的这段时间里无需一直在家里等候,可以先干别的事情。类推到程序设计中时,当提交请求时,期望得到答复时,如果这个答复可能很慢。传统的是一直等待到这个答复收到时再去做别的事情,但如果利用Future设计模式就无需等待答复的到来,在等待答复的过程中可以干其他事情。future模式核心思想就是异步调用,去除了主函数的等待时间,并使得原本需要等待的时间段可以...

weixin_33763709的博客 168

java master work_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.uti...

weixin_31539461的博客 226

java master work_并发编程之Master-Worker模式

我们知道,单个线程计算是串行的,只有等上一个任务结束之后,才能执行下一个任务,所以执行效率是比较低的。那么,如果用多线程执行任务,就可以在单位时间内执行更多的任务,而Master-Worker就是多线程并行计算的一种实现方式。它的思想是,启动两个进程协同工作:Master和Worker进程。Master负责任务的接收和分配,Worker负责具体的子任务执行。每个Worker执行完任务之后把结果返回...

weixin_29416629的博客 166

Java并发编程六 Master-Worker模式

Java并发编程六 Master-Worker模式 Master-Worker是常用的并行计算模式。它的核心思想是系统由两类进程协作工作:Master进程和Worker进程。Master负责接收和分配任务,Worker负责处理子任务。当各个Worker子进程处理完成后,会将结果返回给Master,由Master作归纳总结。其好处就是能将一个大任务分解成若干个小任务,并行执行,从而提高系统的吞吐量...

刘越洋子 545

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;...

weixin_33895695的博客 127

java并发模式_Java 并发编程模式之 Master - Worker模式

1. 角色1) MasterMaster中维护一个job Queue,是任务的描述,这个jobQueue会给每一个Worker共享,因此需要是线程安全的Master中同时维护一个resultMap用于保存每一个job的处理结果。2) WorkerWorker是一个runnable, 在其执行run方法之前需要显示的调用setJobQueue和setResultMap方法将Master中的jobQu...

weixin_42455621的博客 239
上一篇: Spring之使用@Value为静态变量赋值
下一篇: 使用腾讯云的短信业务进行短信验证
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值