Actor模型原理

2022-09-02 13:24:13 字數 1236 閱讀 7008

scala actor執行緒模型可以這樣理解:所有actor共享乙個執行緒池,總的執行緒個數可以配置,也可以根據cpu個數決定;當乙個actor啟動之後,scala分配乙個執行緒給它使用,如果使用receive模型,這個執行緒就一直為該actor所有,如果使用react模型,scala執行完react方法後丟擲異常,則該執行緒就可以被其它actor使用。

下面看一些核心**。

def start(): actor = 

synchronized

this

}

其中reaction實現runnable介面,scheduler基本相當於是乙個執行緒池,所以呼叫start方法之後會有乙個執行緒來為該actor服務。

使用receive模型。

def receive[r](f: partialfunction[any, r]): r =  

else

waitingfor = waitingfornone  

issuspended = 

false

}  val result = f(received.get)  

sessions = sessions.tail  

result  

如果當前mailbox裡面沒有可以處理的訊息,呼叫suspendactor,該方法會呼叫wait;如果有訊息,這呼叫partialfunction進行處理。

使用react模型。

def react(f: partialfunction[any, unit]): nothing =  

else

throw

newsuspendactorexception  

}

再來看看接收訊息的處理**。

def send(msg: any, replyto: outputchannel[any]) = 

synchronized

if(issuspended)  

resumeactor()  

else

// assert continuation != null

scheduler.execute(

newreaction(

this

, continuation, msg))  

} else

這樣,相信大家對scala actor就有了乙個基本的認識。

Actor模型的本質

actor模型的本質已經被強調了無數遍 萬物皆actor。actor之間只有傳送訊息這一種通訊方式,例如,無論是管理員讓工作者幹活,還是工作者把成果交還給管理員,它們之間也要通過傳送訊息的方式來傳遞資訊。這麼做看似不如直接方法呼叫來的直接,但是由於大量的訊息可以同時執行。同樣,訊息讓actor之間解...

Actor併發模型入門

使用scala,基於akka的actor併發模型。importakka.actor.actor importakka.actor.props importakka.actor.actorsystem importakka.routing.roundrobinpool 定義乙個封閉的特質 sealed...

Actor模型和CSP模型的區別

引用至 akka erlang的actor模型與go語言的協程goroutine與通道channel代表的csp communicating sequential processes 模型有什麼區別呢?首先這兩者都是併發模型的解決方案,我們看看actor和channel這兩個方案的不同 actor模...