並行程式設計模式-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】開篇介紹 最近這幾天在搗鼓平行計算,發現還是有很多值得分享的意義,因為我們現在很多人對它的理解還是有點不