播放2个线程池:使用Java默认池VS Akka池

时间:2013-05-13 06:44:19

标签: playframework playframework-2.0 akka

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

  

承诺promiseOfInt = Akka.future(新Callable()   {       public Integer call(){         回来......;       }});

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

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

谢谢, 卢瓦克

1 个答案:

答案 0 :(得分: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中,只要您触及期货和承诺,就会自动使用此ExecutionContext。此线程池实际上基于Play的内部actor系统,通过play配置密钥配置。

总而言之,所有演员在通过Akka插件的ActorSystem创建时,将自动使用Akka线程池(在演员内部,你可以使用context.dispatcher来引用它。)

外部演员,您将使用Play的默认/内部线程池。