actor系統的Java實現 μJavaActors

jopen 12年前發布 | 21K 次閱讀 Java Java開發

μJavaActors 是 actor 系統的一個簡單的 Java 實現。只有 1,200 行代碼,μJavaActors 雖然很小,但很強大。在下面的練習中,您將學習如何使用 μJavaActors 動態地創建和管理 actor,將消息傳送給它們。

μJavaActors 圍繞 3 個核心界面而構建:

  • 消息 是在 actor 之間發送的消息。Message 是 3 個(可選的)值和一些行為的容器:
    • source 是發送 actor。
    • subject 是定義消息含義的字符串(也稱為命令)。
    • data 是消息的任何參數數據;通常是一個映射、列表或數組。參數可以是要處理和/或其他 actor 要與之交互的數據。
    • subjectMatches() 檢查消息主題是否與字符串或正則表達式匹配。
    μJavaActors 包的默認消息類是 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 限制支持的掛起消息數量;此方法可用于預防不受控制地發送。
    大部分程序都有許多 actor,這些 actor 常常具有不同的類型。actor 可在程序啟動時創建或在程序執行時創建(和銷毀)。本文中的 actor 包 包含一個名為 AbstractActor 的抽象類,actor 實現基于該類。

圖 1 顯示了 actor 之間的關系。每個 actor 可向其他 actor 發送消息。這些消息保存在一個消息隊列(也稱為郵箱;從概念上講,每個 actor 有一個隊列,當 ActorManager 看到某個線程可用于處理消息時,就會從隊列中刪除該消息,并將它傳送給在線程下運行的 actor,以便處理該消息。


圖 1. actor 之間的關系
actor系統的Java實現 μJavaActors

來自 IBM DW

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!