2016-12-02 131 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的知识,并且可以回答你所有的问题。