併發模式(二)Master Worker模式

2021-07-27 17:45:52 字數 2494 閱讀 1772

master-worker模式是一種使用多執行緒進行資料處理的結構。多個worker程序協作處理使用者請求,master程序負責維護worker程序,並整合最終處理結果。

master-worker模式是常用的並行模式之一。系統有兩類程序協作工作:master程序和worker程序。master程序負責接收和分配任務,worker程序負責處理子任務。當所有的worker程序將子任務完成以後,將結果返回給master程序,由master程序做歸納和總結。

master維護任務佇列、worker程序佇列、子任務結果集

master-worker模式簡易實現

master

public

class

master

}return

true;

}public

master(worker worker,int countworker)

}//提交乙個子任務

public

void

submit(object o)

//返回子任務結果集

public mapgetresultmap()

//開始執行所有的worker程序

public

void

execute()}}

worker

public

class

worker

implements

runnable

public

void

setresultmap(mapresultmap)

//子任務的處理邏輯,在子類中實現具體邏輯

public object handle(object input)

@override

public

void

run() }}

計算100以內的數字的立方和

cubeplusworker

public

class

cubeplusworker

extends

worker

}

main

public

class

main

//執行子任務

master.execute();

integer result = 0;

system.out.println("每個子任務的執行結果是:");

for (map.entryentry : master.getresultmap().entryset())

system.out.println("開始彙總計算結果:");

if (result != 0 && master.iscomeplete())

system.out.println("cost time :"+(system.nanotime()-s)+"ns");}}

執行結果:

開始彙總計算結果:

the sum is : 17236269

cost time :3900697ns

不使用master-worker模式的程式執行時間要比這個快很多。

優化計算**。不需要等待所有worker都執行完,即可開始計算最終結果。

public

class

main

master.execute();

mapresultmap=master.getresultmap();

int result=0;

while (resultmap.size()>0 || !master.iscomeplete())

integer i=null;

if (key!=null)

//最終結果

if (i!=null)

//移除已被計算過的

if (key!=null)

}system.out.println("the sum is : " + result);

system.out.println("cost time :" + (system.nanotime() - s) + "ns");}}

master-worker模式是一種將序列任務並行化的方法,被分解的子任務在系統中可以被並行處理。同時,master程序不需要等待所有子任務都完成,就可以根據已有的部分結果集計算最終結果。

併發程式設計(二)

使得乙個物件在當前範圍之外可見。比如通過公開方法返回乙個物件的引用 通過類靜態變數公布物件.與之對應的是逸出,指不正確的發布物件,比如將乙個私有的物件發布出去,或者還沒有正確構造完成物件,此物件就已經對外部可見 共有四種方式安全地發布物件 在單例模式中,如何保證只例項化乙個物件並保證執行緒安全?下面...

JAVA高併發六 併發設計模式

單例模式 單例是最常見的一種設計模式,一般用於全域性物件管理,比如xml配置讀寫之類的.一般分為懶漢式,餓漢式.懶漢式 方法上加synchronized 這種方式,由於每次獲取示例都要獲取鎖,不推薦使用,效能較差 懶漢式 使用雙檢鎖 volatile 本方式是對直接在方法上加鎖的乙個優化,好處在於只...

單例模式併發

在研究單例模式的時候,為了保證單例的懶載入是同步的,我們通常會選擇乙個duoble check的方法來保證只有第一次才new物件。1.雙重檢測同步延遲載入 如下 關於volatile的作用在這裡就是保證在new出物件的那一立馬寫入主存,同時通知其他執行緒的他們的cache是無效的,這樣instanc...