gpt4 book ai didi

java - io 相关 actor 的 Akka 调度程序配置

转载 作者:行者123 更新时间:2023-12-02 02:30:42 25 4
gpt4 key购买 nike

我正在为与阻塞 io 相关的参与者配置一些通用调度程序并尝试找到适当的配置。

与 IO 相关的任务不消耗 CPU,因此我需要这样的配置,允许在对任务进行排队之前利用最大可用线程。

目前我正在考虑。

io-dispatcher {
type = Dispatcher
executor = "thread-pool-executor"
thread-pool-executor {
keep-alive-time = 30s
fixed-pool-size = off
core-pool-size-min = 128
core-pool-size-max = 128
max-pool-size-min = 128
max-pool-size-max = 128

allow-core-timeout = on
}

}

通过这种方式,我将得到一个最多包含 128 个线程的收缩池。

实现此目的的正确方法吗?

最佳答案

您显式设置fixed-pool-size = off,但随后将线程池配置为与固定大小池完全相同,这似乎是矛盾的。我认为以下配置与您的相同:

io-dispatcher {
type = Dispatcher
executor = "thread-pool-executor"
thread-pool-executor {
keep-alive-time = 30s
fixed-pool-size = 128
allow-core-timeout = on
}
}

除此之外,选择池主要取决于您的需求,并且可能需要一些调整。如果您预计应用程序大多数时间都会有较高的线程需求,那么您当前的配置可能没问题。

如果需求主要由峰值组成,但大多数时候要低得多,则最好降低核心池大小。根据您当前的配置,即使在您只需要几个线程(例如 10 个)的时期,您的池也将拥有 128 个线程。这是因为每次新任务到达池时,如果池大小小于 128,它不会重用现有线程,而是只会创建一个新线程,尝试达到核心大小。同样,在低需求时期,这可能是浪费的线程分配。在这种情况下,请将核心大小设置为平均需求,将最大大小设置为大于峰值需求。

javadoc 中对 ThreadPoolExecutor 的解释非常好:https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html .

关于java - io 相关 actor 的 Akka 调度程序配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47156223/

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