5

根据文档,使用演员的更简单方法是:

承诺 promiseOfInt = Akka.future( new Callable() { public Integer call() { return ... ; } } );

但是文档还说,使用 Java API,它将始终使用相同的线程池(播放默认线程池)。

文档说还有一个 Akka 池供演员使用。如何将此actor任务发送到Akka线程池,而不是阻止常见的用户操作?所以我可以调整 Akka 池并保持默认池较小。

谢谢,洛伊克

4

1 回答 1

1

Java Akka插件 ( play.libs.Akka) 转发到 Scala 插件 ( play.api.libs.Akka),后者又会根据应用程序的配置启动一个新的 Actor 系统。(这就是插件所做的一切。)

因此,您将使用基于akka配置键的普通 application.conf 文件配置该 ActorSystem 及其所有调度程序(调度程序也是一个 ExecutionContext)。这些调度程序是文档所指的线程池。

导入时使用默认线程池play.api.libs.concurrent.Execution.default。这是一个仅限 Scala 的 API。在 Java 中,只要你接触到 futures 和 promises,这个 ExecutionContext 就会自动使用。这个线程池实际上是基于 Play 的内部 actor 系统,通过playconfig 键进行配置。

因此,总而言之,当通过 Akka 插件的 ActorSystem 创建时,所有的 Actor 将自动使用 Akka 线程池(在一个 Actor 内部,您可以使用 引用它context.dispatcher)。

外部参与者,您将使用 Play 的默认/内部线程池。

于 2014-10-02T14:21:00.400 回答