2016-12-02 112 views
0

我是新來的演員模型,並試圖寫一個簡單的例子。我想使用Scala和Akka遍歷目錄樹。程序應該找到所有文件並對每個文件執行任意(但快速)的操作。使用akka actors來遍歷目錄樹

我想檢查如何使用演員爲遞歸建模? 當遍歷完成時,我該如何優雅地阻止actor系統? 如何控制演員的數量以防止內存不足? 有沒有辦法讓演員的郵箱變得太大? 如果文件操作需要很長時間才能執行,會有什麼不同?

任何幫助,將不勝感激!

回答

2
  1. 演員是工人。他們在工作中取得成果,或者監督其他工作人員。一般來說,你希望你的演員有一個單一的責任。
  2. 從理論上講,你可以有一個actor處理目錄的內容,處理每個文件,或爲每個遇到的目錄產生一個actor。這會很糟糕,只要文件處理時間會使系統停頓。
  3. 有幾種方法可以優雅地停止角色系統。 Akka文檔提到了其中幾個。
  4. 你可以有一個演員監督員,對演員的請求進行排隊,如果演員的閾值數低於演員,則派生演員,當演員完成時減少演員的數量。這是主管演員的工作。監督員可以在監視時坐在一邊,也可以派遣工作。阿卡有演員模仿這兩種方法的實現。
  5. 是的,有幾種方法可以控制郵箱的大小。閱讀文檔。
  6. 如果以錯誤的方式執行文件操作,可能會阻止其他處理,如天真的遞歸遍歷。

首先要注意的是有兩種類型的工作:遍歷文件層次結構和處理單個文件。作爲您的第一個實現嘗試,請創建兩個actor,actor A和actor B. Actor A將遍歷文件系統,並將消息發送給actor B,並提供要處理的文件的路徑。當演員A完成時,它向演員B發送「全部完成」指示符並終止。當演員B處理「全部完成」指示符時,它終止。這是您可以用來學習如何使用演員的基本實施。

其他一切都是這個變化。下一個變體可能是用共享郵箱創建兩個actor B.關機有一點涉及,但仍然簡單明瞭。下一個變化是創建一個調度員演員,該演員將工作分配給一個或多個演員B。下一個變體使用多個演員A來遍歷文件系統,並由一個主管來控制有多少演員創建。

如果你遵循這個發展計劃,你將學到很多關於如何使用Akka的知識,並且可以回答你所有的問題。