2013-02-07 137 views
2

以下聲明是否正確,否則如何改進?阿卡演員的簡單解釋

當Akka actor發送消息時,作業被提交給執行者。 當有一個空閒線程時,它會調用獲取該演員的 鎖定的作業(假設它可以,否則就是另一個作業)。然後調用參與者的 receive方法,一旦完成, 作業將被丟棄並且線程返回到池中。然後循環重複。 與併發線程相關的所有複雜的東西是由Akka處理的 ,釋放程序員專注於解決業務問題的 。

+4

這是一個具體實現的描述是Actors,Akka我假設。你應該修改它,並說明你的帖子的標題。如果這不是你的意圖,那麼你太過於關注所有Actor系統中不存在的實現細節。 –

+1

假設阿卡:我不相信任何演員自己的鎖定是牽扯到的。每個參與者實例都有自己的「郵箱」(請求隊列 - 術語「作業」未被使用),並且排隊的消息一次傳遞給參與者。任何給定的actor實例一次不會處理多個請求。通常可以有任意數量的給定類型的角色,他們都獨立運作。 –

+0

是的,我的意思是阿卡,我已經更新了這個問題。 –

回答

7

更準確的應該是:

當消息被髮送到一個演員,它被放置在該演員的隊列稱爲郵箱。同時,可能有成百上千的演員在他們的郵箱中有待處理的消息。 Akka使用有限數量的工作線程,選擇這些參與者的子集,並按照時間順序對來自郵箱的每條消息調用其方法receive

多個線程從不處理同一個actor。此外,Akka可能會決定中斷來自郵箱的郵件處理,並選擇不同的演員以保持公平並避免飢餓。因爲每個receive調用都需要一個線程,所以此方法不應該阻塞,等待或休眠。