针对akka http客户端工作负载的Fork Join Pool vs Fixed Thread Pool?

时间:2017-05-03 09:46:16

标签: scala akka akka-http forkjoinpool

我有一个fork join dispatcher,它配置的服务只使用akka http的客户端(通过主机连接池):

my-dispatcher {
  type = Dispatcher
  executor = "fork-join-executor"

  fork-join-executor {
    parallelism-min = 256
    parallelism-factor = 128.0
    parallelism-max = 2048
  }

}

服务逻辑唯一要做的就是从外部源请求,使用jawn解组它,然后将jawn ast转换为case类:

def get(uri: Uri)[T]: Future[T] = {
    for {
      response <- request(uri)
      json <- Unmarshal(response.entity).to[Try[JValue]]
    } yield json.transformTo[T]
  }

我想知道为这种工作负载使用固定线程池是否更有效。这项服务大约需要150 req / s,我想将CPU使用率保持在1 CPU以下(目前它的徘徊在1.25-1.5左右)。

1 个答案:

答案 0 :(得分:6)

根据wisdom of the ancients,您的工作流是I / O绑定的,因此您应该选择由CachedThreadPool支持的执行上下文,但是如果需要限制,则应该使用{{1 }}。

此外,根据部署环境,您可以通过setting CPU affinity将Java进程限制为操作系统级别的一个核心。