2014-04-21 52 views
0

我有一個啓動過程的主進程,通過啓動工作者角色和主角。讓我在這個例子中如何通知所有工作演員終止在斯卡拉?

class process{ 

var q :collection.mutable.HashMap[] 
var map:collection.mutable.HashMap[] 

var itrator = q.grouped(1000) 

//start master actor 
var mas:Actor=null 
mas = new Master(map) 
mas.start 

//start worker actors 
var workActor :Actor = null 

    for(it<-itrator) 
    { 
    workActor = new Worker(map,mas) 
    workActor.start 
    } 
} 

class Worker(map:collection.mutable.HashMap[],master:Actor){ 

def act(){ 
//check for map size, break if it reaches n size 
//pass the message to master to save the data 
//then exit 
//else 
//start analysis process 
//then exit 
} 
} 

方案1說明: 一度非常工作者演員完成,他們通知船長演員,更新在主演員計數。一旦所有的工人演員完成後,MASTER演員將保存MAP。

場景2: 一旦「地圖」的大小達到一定數量,我想工人演員終止,並且主演員應保存數據,然後自行終止。

問題:當前在場景2中達到n大小後,工作者參與者終止。但是,所有工作演員只有在檢查了n尺寸條件後才終止。是否有辦法與所有當前正在工作的演員同時通信,以便在一名工作人員達到n大小後終止?

回答

2

如果切換到Akka Actors而不是Scala Actors(推薦使用Scala Actors不推薦),那麼這非常簡單。只要主演員是工人的主管/父母,那麼一旦(主人)從單個工人那裏收到工作完成的信號,它就會停止,從而停止所有的孩子。唯一需要注意的是,在工作過程中(處理郵箱中的郵件)不能停止工作人員,但停止請求會在處理更多郵件之前停止。