1. 程式人生 > >並行程式設計模式-master-worker模式

並行程式設計模式-master-worker模式

master-worker核心思想

這裡寫圖片描述

master-worker模式優點

這裡寫圖片描述

master-worker模式結構

這裡寫圖片描述

master-worker模式主要參與者

這裡寫圖片描述

master-worker樣例程式碼結構

這裡寫圖片描述

程式碼

1.master.java

package test;

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
Map<String, Object> getResultMap() { return resultMap; } 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); } public void execute(){ for(Map.Entry<String, Thread> entry:threadMap.entrySet()){ entry.getValue().start(); } } public boolean isComplete(){ for(Map.Entry<String, Thread> entry:threadMap.entrySet()){ if(entry.getValue().getState()!=Thread.State.TERMINATED){ return false; } } return true; } }

2.Worker.java

package test;

import java.util.Map;
import java.util.Queue;

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

    @Override
    public void run() {

        while (true) {
            Object input = workQueue.poll();
            if( input == null){
                break;
            }
            //處理子任務
            Object re = handle(input);
            int k =input.hashCode();
            //將處理結果寫入結果集
            resultMap.put(Integer.toString(input.hashCode()), re);
        }
    }

}

3.PlusWorker

package test;

public class PlusWorker extends Worker{


    public Object handle(Object input){
        Integer i =(Integer)input;
        return i*i*i;
    }
}

4.TestMain

package test;

import java.util.Map;
import java.util.Set;

public class TestMain {

    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.isComplete()) {
            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 = re + i;
            }
            if (key != null) {
                System.out.println("removekey:"+key);
                resultMap.remove(key);
            }
        }
        System.out.println("re" + re);
    }

}

相關推薦

並行程式設計模式-master-worker模式

master-worker核心思想 master-worker模式優點 master-worker模式結構 master-worker模式主要參與者 master-worker樣例程式碼結構 程式碼 1.m

Java多執行緒程式設計Master-Worker模式的詳解

Java多執行緒程式設計中,常用的多執行緒設計模式包括:Future模式、Master-Worker模式、Guarded Suspeionsion模式、不變模式和生產者-消費者模式等。這篇文章主要講述Master-Worker模式,關於其他多執行緒設計模式的地址如下: 關於

併發程式設計Master-Worker模式

我們知道,單個執行緒計算是序列的,只有等上一個任務結束之後,才能執行下一個任務,所以執行效率是比較低的。 那麼,如果用多執行緒執行任務,就可以在單位時間內執行更多的任務,而Master-Worker就是多執行緒平行計算的一種實現方式。 它的思想是,啟動兩個程序協同工作:Master和Worker程序。 Mas

14.多執行緒設計模式 - Master-Worker模式

多執行緒設計模式 - Master-Worker模式  併發設計模式屬於設計優化的一部分,它對於一些常用的多執行緒結構的總結和抽象。與序列相比並行程式結構通常較為複雜,因此合理的使用並行模式在多執行緒併發中更具有意義。 1. Master-Worker模式 - Master-Worker

多執行緒並行設計模式Master-Worker模式

Master-Worker模式的核心思想是在於Master程序和Worker程序各自分擔各自的任務,協同完成資訊處理的模式 使用一個圖例來簡單描述一下:  如圖所示Master-Worker的工作機制就是Master接收到了一個任務,對任務進行拆分,並且分配給各個Worker

多線程:多線程設計模式(三):Master-Worker模式

fonts strong stat bre not 多線程 too () 部分 Master-Worker模式是常用的並行模式之一,它的核心思想是,系統有兩個進程協作工作:Master進程,負責接收和分配任務;Worker進程,負責處理子任務。當Worker進程將子任務處理

並發模型(二)——Master-Worker模式

string 程序 分配任務 之一 size void con .exe || Master-Worker模式是常用的並行模式之一,它的核心思想是,系統有兩個進程協作工作:Master進程,負責接收和分配任務;Worker進程,負責處理子任務。當Worker進程將子任

Java Thread系列(九)Master-Worker模式

線程 支持 需要 列表 deque 開啟 exc oid src Java Thread系列(九)Master-Worker模式 Master-Worker模式是常用的並行設計模式. 一、Master-Worker 模式核心思想 Master-Worker 系統由兩個角

深入理解[Master-Worker模式]原理與技術

() .exe 思想 thead 常用 ica ces 類的方法 and Master-Worker模式是常用的並行模式之一。它的核心思想是,系統由兩類進程協作工作:Master進程和Worker進程。Master進程負責接收和分配任務,Worker進程負責處理子任務。當各

java多執行緒Master-worker模式

Master-Worker模式是常用的平行計算模式。它的核心思想是系統由兩類程序協作工作:Master程序和Worker程序。Master負責接收和分配任務,Worker負責處理子任務。當各個Worker子程序處理完成後,會將結果返回給Master,由Master做歸納和總結。其好處是能將一個大任務

多執行緒設計模式Master-Worker模式

Master-Worker是常用的平行計算模式。它的核心思想是系統由兩類程序協作工作:Master程序和Worker程序。Master負責接收和分配任務,Worker負責處理子任務。當各個Worker子程序處理完成後,會將結果返回給Master,由Master作歸納總結。其好處就是能將一個大任務分解

併發模型(二)——Master-Worker模式

    Master-Worker模式是常用的並行模式之一,它的核心思想是,系統有兩個程序協作工作:Master程序,負責接收和分配任務;Worker程序,負責處理子任務。當Worker程序將子任務處理完成後,結果返回給Master程序,由Master程序做歸納彙總,最後得到最

多執行緒下的設計模式Master-Worker模式

該模式可以簡單理解為:首先client將任務交給Master,Master中使用一個併發集合類來承載所有任務,使用一個集合去承載所有的Worker物件,並且有一個併發集合類來承載每一個Worker併發處理任務的結果集;每一個Worker是一個工作執行緒,所以首先要實現Runn

並行程式設計之Java記憶體模式

Java記憶體模式 以前我在看一些並行程式設計的書時候,老是有些模糊,後來看到《深入理解Java虛擬機器 第二版》這邊書在並行哪章時候,才逐漸清晰,現在就來講講Java記憶體模式。 - 主存和工作記憶體 1. 主存 儲存了有關物件class屬性欄位,全

多執行緒中的Master-Worker模式

       Master-Worker模式是常用的平行計算模式。核心是系統由兩類程序協作工作:Master程序和Worker程序。Master負責接收和分配任務,Worker負責處理任務。當各個Worker子程序處理完成後,將結果返回給Master,由Master進行資料融

JAVA多執行緒之Master worker並行設計模式

在多執行緒程式設計中Master worker 模式是常用的並行模式之一,核心思想是由兩類程序協助完成的,Master 程序負責接收和分配任務並處理儲存結果集,Worker 負責處理任務, 並把結果返回給Master 程序. 這類設計模式最大的好處是 將一個大任務分配成若干個

Master-Worker設計模式介紹

stat 方式 tint 代碼實現 exe ide port client shm Master-Worker模式是常用的並行設計模式。核心思想是,系統由兩個角色組成,Master和Worker,Master負責接收和分配任務,Worker負責處理子任務。任務處理過程中,M

多線程的設計模式:Future、Master-Worker

future模式 多線程 try 繼續 分享 接收 imp 線程結構 優化 一 簡介 並行設計模式屬於設計優化的一部分,它是對一些常用的多線程結構的總結和抽象。與串行程序相比,並行程序的結構通常更為復雜,因此合理的使用並行模式在多線程開發中更具有意義,在這裏主要介紹==Fu

【slighttpd】基於lighttpd架構的Server專案實戰(3)—Master&Worker模式

轉載地址:https://blog.csdn.net/jiange_zh/article/details/50636180 現在,我們開始一步步構建我們的專案了~ Master-Worker模式 本次一共涉及2個類:Master和Worker; 以下是兩者的標頭檔案: /****

.NET並行程式設計實踐(一:.NET平行計算基本介紹、並行迴圈使用模式

閱讀目錄: 1.開篇介紹 2.NET平行計算基本介紹 3.並行迴圈使用模式 3.1並行For迴圈 3.2並行ForEach迴圈 3.3並行LINQ(PLINQ) 1】開篇介紹 最近這幾天在搗鼓平行計算,發現還是有很多值得分享的意義,因為我們現在很多人對它的理解還是有點不