μJavaActorsactor系統(tǒng)的Java實現(xiàn)
μJavaActors 是 actor 系統(tǒng)的一個簡單的 Java 實現(xiàn)。只有 1,200 行代碼,μJavaActors 雖然很小,但很強大。在下面的練習(xí)中,您將學(xué)習(xí)如何使用 μJavaActors 動態(tài)地創(chuàng)建和管理 actor,將消息傳送給它們。
μJavaActors 圍繞 3 個核心界面而構(gòu)建:
- 消息 是在 actor 之間發(fā)送的消息。
Message是 3 個(可選的)值和一些行為的容器:-
source是發(fā)送 actor。 -
subject是定義消息含義的字符串(也稱為命令)。 -
data是消息的任何參數(shù)數(shù)據(jù);通常是一個映射、列表或數(shù)組。參數(shù)可以是要處理和/或其他 actor 要與之交互的數(shù)據(jù)。 -
subjectMatches()檢查消息主題是否與字符串或正則表達(dá)式匹配。
DefaultMessage。 -
- ActorManager 是一個 actor 管理器。它負(fù)責(zé)向 actor 分配線程(進(jìn)而分配處理器)來處理消息。
ActorManager擁有以下關(guān)鍵行為或特征:-
createActor()創(chuàng)建一個 actor 并將它與此管理器相關(guān)聯(lián)。 -
startActor()啟動一個 actor。 -
detachActor()停止一個 actor 并將它與此管理器斷開。 -
send()/broadcast()將一條消息發(fā)送給一個 actor、一組 actor、一個類別中的任何 actor 或所有 actor。
ActorManager,但如果您希望管理多個線程和/或 actor 池,也可以有多個ActorManager。此接口的默認(rèn)實現(xiàn)是DefaultActorManager。 -
- Actor 是一個執(zhí)行單元,一次處理一條消息。
Actor具有以下關(guān)鍵行為或特征:- 每個 actor 有一個
name,該名稱在每個ActorManager中必須是惟一的。 - 每個 actor 屬于一個
category;類別是一種向一組 actor 中的一個成員發(fā)送消息的方式。一個 actor 一次只能屬于一個類別。 - 只要
ActorManager可以提供一個執(zhí)行 actor 的線程,系統(tǒng)就會調(diào)用receive()。為了保持最高效率,actor 應(yīng)該迅速處理消息,而不要進(jìn)入漫長的等待狀態(tài)(比如等待人為輸入)。 -
willReceive()允許 actor 過濾潛在的消息主題。 -
peek()允許該 actor 和其他 actor 查看是否存在掛起的消息(或許是為了選擇主題)。 -
remove()允許該 actor 和其他 actor 刪除或取消任何尚未處理的消息。 -
getMessageCount()允許該 actor 和其他 actor 獲取掛起的消息數(shù)量。 -
getMaxMessageCount()允許 actor 限制支持的掛起消息數(shù)量;此方法可用于預(yù)防不受控制地發(fā)送。
AbstractActor的抽象類,actor 實現(xiàn)基于該類。 - 每個 actor 有一個
圖 1 顯示了 actor 之間的關(guān)系。每個 actor 可向其他 actor 發(fā)送消息。這些消息保存在一個消息隊列(也稱為郵箱;從概念上講,每個 actor 有一個隊列,當(dāng) ActorManager 看到某個線程可用于處理消息時,就會從隊列中刪除該消息,并將它傳送給在線程下運行的 actor,以便處理該消息。
介紹內(nèi)容節(jié)選自 IBM DW
評論
圖片
表情
