我有一个使用Akka actor在java上构建的播放应用程序。最近我遇到了与并行性相关的性能问题。我通过谷歌发现我们可以为演员分配自定义/固定的调度员/执行者。在创建actor时,我已经使用附加了唯一ID的actor名称命名了actor。
当演员姓名附加了唯一ID时,有没有办法指定我的演员使用固定调度员。
我正在尝试更新application.conf,如下所示,并没有按预期获得结果。它仍在使用默认调度程序。
我的演员在akka:// application / user / actor
akka.actor.deployment {
"/actorName*" {
dispatcher = mycustom-dispatcher
}
}
我使用的参考文献:http://doc.akka.io/docs/akka/2.1.4/java/dispatchers.html#Setting_the_dispatcher_for_an_Actor
答案 0 :(得分:1)
是的,您可以明确地将指派者分配给您的演员[s]。
import akka.actor.Props
val myActor =
context.actorOf(Props[MyActor].withDispatcher("my-dispatcher"), "myactor1")
或java变体:
ActorRef myActor =
system.actorOf(Props.create(MyUntypedActor.class).withDispatcher("my-dispatcher"),
"myactor3");
配置
my-dispatcher {
executor = "thread-pool-executor"
type = PinnedDispatcher
}
的更多内容
答案 1 :(得分:0)
您必须指定要与actor一起使用的调度程序,通常会传递执行上下文,您可以在其中指定要使用的调度程序:
implicit val executionContext = system.dispatchers.lookup("my-dispatcher")
您还可以更改此处指定的默认调度程序: https://doc.akka.io/docs/akka/snapshot/scala/dispatchers.html#default-dispatcher
答案 2 :(得分:0)
akka.actor.deployment {
"/actorName*" {
dispatcher = mycustom-dispatcher
}
}
上述方法无效,因为(来自documentation):
- 通配符无法用于部分匹配部分,例如:
/foo*/bar
,/f*o/bar
等。
但是,您可以使用通配符匹配actor层次结构中特定级别的所有actor。例如,让我们说您想要使用自定义调度程序的所有actor都位于akka://application/user/someParent/
下。然后,您可以通过以下方式配置所有someParent
的直接子项:
akka.actor.deployment {
"/someParent/*" {
dispatcher = mycustom-dispatcher
}
}
阅读链接文档以获取更多选项。