天天看點

scala 簡要: Actor

版權聲明:本文為半吊子子全棧工匠(wireless_com,同公衆号)原創文章,未經允許不得轉載。 https://blog.csdn.net/wireless_com/article/details/42360151

 actor提供了并發程式中與傳統的基于鎖的結構不同的另一種選擇,通過盡可能避免鎖和共享狀态,actor更容易地設計出正确、沒有死鎖或争用狀況的程式。Scala提供了actor的簡單實作,akka(http://akka.io)提供了進階actor類庫。

每個actor都要擴充Actor類并重寫Act方法,actor是處理異步消息的對象,消息可以是任何對象,通過!操作符發送消息,例如:

actorX !“happy new year”

一個好的方式是使用樣例類作為消息,這樣,actor可以使用模式比對了。發送的消息存放在mailbox,receive方法從mailbox中取下一條消息并處理,如果在receive方法被調用時并沒消息,則該調用會阻塞,直到有消息抵達。actor可以安全地修改它自己的資料。

向其他actor發送消息的方法:

1)使用全局的actor

2)actor可以構造成帶有指向一個或更多actor的引用

3)actor可接收帶有指向另一個actor的引用的消息

4)actor可以傳回消息給發送方

actor可以發送一個消息并等待回複,用!?操作符即可,盡量避免同步消息。

actor的act方法在actor的start方法被調用時開始執行。接下來進入某個循環,終止條件如下:

1)act方法傳回

2)act方法由于異常被終止

3)actor調用exit方法

通過link方法可以将不同的actor連結在一起。

actor的設計原則如下:

1)避免使用共享狀态

2)不要調用actor的方法

3)保持每個actor簡單

4)上下文資料包含在消息中

5)最小化給發送方回複

6)最少阻塞調用

7)使用react

8)建立失敗區