gpt4 book ai didi

scala - 如何在Play Framework中配置线程池优先级

转载 作者:行者123 更新时间:2023-12-01 07:36:50 25 4
gpt4 key购买 nike

我们在系统中有 2 个 ExecutionContext(Scala 2.11.4,Playframework 2.3.7)

  1. 主要上下文 - 用于系统操作工作(使用主要 Play ExecutionContext)。
  2. 管理 - 用于后端相关任务。

我在 application.configurations 中将它们分成两部分。

play {
akka {
akka.loggers = ["akka.event.slf4j.Slf4jLogger"]
loglevel = DEBUG
actor {
default-dispatcher = {
fork-join-executor {
parallelism-min = 20
parallelism-max = 20
}
}
}
}
}

contexts {
admin {
fork-join-executor {
parallelism-min = 30
parallelism-max = 30
}
}
}

有没有办法配置ThreadPool的优先级?

最佳答案

目前无法配置线程优先级,因为该设置在许多平台上几乎没有影响,因此可以作为安慰剂。如果您开始并积极使用比 CPU 内核更多的线程,那么由此产生的竞争将代价高昂并且会浪费资源,因此您最好仔细调整线程池大小以适应 CPU 绑定(bind)部分的可用内核。

贴出的配置例子让我疑惑:系统真的有30多个核心吗?否则 contexts.admin 调度程序无论如何都无法从优先级排序中获益。

最后只有一种方法可以为特定任务保留 CPU 时间,那就是永远不要将这些内核分配给任何其他任务(如果您正在编写低级 C 代码并使用Unix 实时优先级,但这很容易出错,而且胆小者不宜——犯错会使您无法进入系统)。

这意味着在一个有 24 个内核的系统上,它应该处理一些网络流量,与一些数据库对话并处理一些数字,例如,我会为数字处理创建一个大小为 16 的固定线程池,并为阻塞 DB 调用(根据最适合该 DB 的连接数确定大小,比如 40)加上处理网络和其他杂项的 Play 和 Akka 的正常调度程序(既不是阻塞也不是 CPU 密集型)。线程优先级不影响此图片。

关于scala - 如何在Play Framework中配置线程池优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28087783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com