Akka:演员产卵vs填充邮箱

时间:2012-05-02 11:11:29

标签: scala actor akka

如果你想同时执行长时间运行的计算(在一台机器上),Akka演员可以提供帮助。

一种方法是为每件作品生成一个新演员。像

这样的东西
while(true) {
    val actor = system.actorOf(Props[ProcessingActor])
    (actor ? msg).map { 
        ... 
        system.stop(actor)
    }
}

第二个想法是在路由器后面配置一定数量的actor。然后将所有消息发送到路由器。

val router = system.actorOf(Props[ProcessingActor].withRouter(RoundRobinRouter(nrOfInstances = 5)))
while(true) {
    (router ? msg).map { ... }
}

我想知道,如果系统过载会更好(传入消息的速率高于处理速率)?

哪个会持续更长时间?并且最终是否会以OOMError炸毁系统?

1 个答案:

答案 0 :(得分:4)

在为每项任务创建新Actor之前,您还可以使用Future。这实际上取决于你想要达到的目标。要使用最少的内存使用完成尽可能多的工作,您应该使用actor /路由器方法。期货更昂贵,因为每项任务都会创建FuturePromise的新实例。但这实际上取决于您的用例,哪种方法更好。当真的不需要它们时,我就不会创造很多演员。特别是当system.actorOf总是创建一个新的错误内核。