我为与阻止io& amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp;试图找到合适的配置。
与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个线程的缩小池。
达到这个目的是否正确?
答案 0 :(得分:2)
您明确设置fixed-pool-size = off似乎是矛盾的,但您将线程池配置为与固定大小的池完全相同。在我看来,以下配置与您的配置相同:
boolean match = charList.contains(firstChar + "");
除此之外,选择游泳池主要取决于您的需求,可能需要进行一些调整。如果您希望大多数时间都能从应用程序中获得高线程需求,那么您可以使用当前配置。
如果需求主要由峰值组成,但在大多数情况下要低得多,那么最好还是降低核心池大小。使用当前配置,即使在您只需要几个线程(例如10个)的时间段内,您的池也将有128个线程。这是因为每次新任务到达您的池时,如果池大小小于128,它将不会重用现有线程,而只是创建一个新线程,尝试达到核心大小。同样,在需求较低的时期,这可能是一个浪费的线程分配。在这种情况下,将核心大小设置为平均需求,将最大大小设置为高于峰值需求的大小。
在javadoc中对ThreadPoolExecutor的解释非常好:https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html。