【问题标题】:Fork Join Pool vs Fixed Thread Pool for akka http client-focused workload?Fork Join Pool vs Fixed Thread Pool for akka http client-focused工作负载?
【发布时间】:2017-10-01 01:55:35
【问题描述】:

我为仅使用 akka http 客户端(通过主机连接池)的服务配置了 fork join 调度程序:

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

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

}

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

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

我想知道对于这种工作负载使用固定线程池是否更有效。该服务获得大约 150 个请求/秒,我希望将 CPU 使用率保持在 1 个 CPU 以下(目前徘徊在 1.25-1.5 个 CPU 左右)。

【问题讨论】:

  • 您对 fork-join-executor 参数的选择无论如何都显得过分了。查看docs 了解更多指南。

标签: scala akka akka-http forkjoinpool


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多