与io相关的演员的Akka调度员配置

时间:2017-11-07 10:59:39

标签: java multithreading scala akka

我为与阻止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个线程的缩小池。

达到这个目的是否正确?

1 个答案:

答案 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