actor系統的Java實現 μJavaActors
μJavaActors 是 actor 系統的一個簡單的 Java 實現。只有 1,200 行代碼,μJavaActors 雖然很小,但很強大。在下面的練習中,您將學習如何使用 μJavaActors 動態地創建和管理 actor,將消息傳送給它們。
μJavaActors 圍繞 3 個核心界面而構建:
- 消息 是在 actor 之間發送的消息。
Message
是 3 個(可選的)值和一些行為的容器:source
是發送 actor。subject
是定義消息含義的字符串(也稱為命令)。data
是消息的任何參數數據;通常是一個映射、列表或數組。參數可以是要處理和/或其他 actor 要與之交互的數據。subjectMatches()
檢查消息主題是否與字符串或正則表達式匹配。
DefaultMessage
。 - ActorManager 是一個 actor 管理器。它負責向 actor 分配線程(進而分配處理器)來處理消息。
ActorManager
擁有以下關鍵行為或特征:createActor()
創建一個 actor 并將它與此管理器相關聯。startActor()
啟動一個 actor。detachActor()
停止一個 actor 并將它與此管理器斷開。send()/broadcast()
將一條消息發送給一個 actor、一組 actor、一個類別中的任何 actor 或所有 actor。
ActorManager
,但如果您希望管理多個線程和/或 actor 池,也可以有多個ActorManager
。此接口的默認實現是DefaultActorManager
。 - Actor 是一個執行單元,一次處理一條消息。
Actor
具有以下關鍵行為或特征:- 每個 actor 有一個
name
,該名稱在每個ActorManager
中必須是惟一的。 - 每個 actor 屬于一個
category
;類別是一種向一組 actor 中的一個成員發送消息的方式。一個 actor 一次只能屬于一個類別。 - 只要
ActorManager
可以提供一個執行 actor 的線程,系統就會調用receive()
。為了保持最高效率,actor 應該迅速處理消息,而不要進入漫長的等待狀態(比如等待人為輸入)。 willReceive()
允許 actor 過濾潛在的消息主題。peek()
允許該 actor 和其他 actor 查看是否存在掛起的消息(或許是為了選擇主題)。remove()
允許該 actor 和其他 actor 刪除或取消任何尚未處理的消息。getMessageCount()
允許該 actor 和其他 actor 獲取掛起的消息數量。getMaxMessageCount()
允許 actor 限制支持的掛起消息數量;此方法可用于預防不受控制地發送。
AbstractActor
的抽象類,actor 實現基于該類。 - 每個 actor 有一個
圖 1 顯示了 actor 之間的關系。每個 actor 可向其他 actor 發送消息。這些消息保存在一個消息隊列(也稱為郵箱;從概念上講,每個 actor 有一個隊列,當 ActorManager
看到某個線程可用于處理消息時,就會從隊列中刪除該消息,并將它傳送給在線程下運行的 actor,以便處理該消息。
來自 IBM DW
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!