在playframework中,我如何优先考虑ik线程对akka actor?

时间:2013-01-21 16:33:09

标签: playframework-2.0 akka

我正在编写一个关于play 2.0框架的应用程序。此应用程序的目的是处理图像上传并在后台调整它们的大小。

上传是通过将文件保存到文件系统的标准邮件处理程序处理的。现在,这只是在事件或IO线程上完成的。成功保存文件后,会向AKKA演员发送一条消息,将原始图像的大小调整为多种不同的大小(目前为4)。这些调整大小的操作对CPU要求很高,需要一些时间。

这一切都运行良好,直到我在一些负载下测试应用程序。在负载下,调整大小操作实际上消耗了所有可用的CPU时间,因此传入的HTTP请求在某种程度上缺乏CPU时间,我们看到这些请求积压到最终请求开始超时的程度。

所以问题是,我如何配置系统(或重新编写它)以使传入的HTTP请求比调整大小请求具有更高的优先级?

1 个答案:

答案 0 :(得分:3)

您应该调查dispatcher in Akka。基本上,它们抽象每个actor用于处理的线程/工作池。您可以定义一个全局调度程序或具有多个全局调度程序。

定义只有有限数量的线程(1或2)的调度程序:

resizing-thread-pool-dispatcher {
  type = Dispatcher
  executor = "thread-pool-executor"
  thread-pool-executor {
    core-pool-size-max = 1
  }
}

并将其与调整大小的演员联系起来:

context.
  actorOf(
    Props[ResizingActor].withDispatcher("resizing-thread-pool-dispatcher"), 
    "resizingActor"
  )

当然,我们的想法是您的resizing-thread-pool-dispatcher使用较少的可用核心线程,因此您的HTTP线程仍然具有响应能力。