playframework-2.0 - 在 playframework 中,我如何将 io 线程优先于 akka Actor ?

标签 playframework-2.0 akka

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

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

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

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

最佳答案

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

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

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

并将其与您调整大小的 Actor 相关联:
context.
  actorOf(
    Props[ResizingActor].withDispatcher("resizing-thread-pool-dispatcher"), 
    "resizingActor"
  )

当然想法是你的resizing-thread-pool-dispatcher使用较少的可用内核线程,因此您的 HTTP 线程仍然可以响应。

关于playframework-2.0 - 在 playframework 中,我如何将 io 线程优先于 akka Actor ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14443090/

相关文章:

java - 迁移 Play ! Framework 1.2.3 应用程序 Controller 到 2.0

java - Play Framework 2 在 Intellij IDEA 中运行 JUnit 测试

web-services - 一个 Action 多个WS调用,Promise对象如何处理?

scala - 如何使用Akka HTTP通过输出流生成内容

java - Akka future list - 如何等待 future list 完成?

java - 是否可以使用 plafyramework2 for java 和 groovy 模板?

java - 如何使用注解(Actions)来验证/授权用户?

playframework - 如何实现Promise对象?

scala - Snappy-java 解压缩有效数据失败

scala - 在 scala-akka actor 中,我应该在处理消息时打开一个 future 吗?