如何为Akka中的不同调度程序指定不同的吞吐量值?

时间:2015-12-18 10:19:26

标签: configuration akka

我的Akka演员系统有许多不同的调度员。示例将类似于application.conf文件中的以下内容......

market-dispatcher {
  executor = "thread-pool-executor"
  type = PinnedDispatcher
  thread-pool-executor.allow-core-timeout=off
}

现在我想通过指定吞吐量的值来进一步配置我的调度程序。我试过了明显的解决方案......

market-dispatcher {
  executor = "thread-pool-executor"
  type = PinnedDispatcher
  thread-pool-executor.allow-core-timeout=off
  throughput = 1000
}

...但我没有注意到系统性能有任何明显的不同。是否可以单独为各个调度程序配置吞吐量?

1 个答案:

答案 0 :(得分:0)

是的,您可以配置每个调度程序的吞吐量。但就您的示例而言,对于PinnedDispatcher,吞吐量设置将被忽略。来自文档:

  

吞吐量定义了每个要处理的最大消息数   演员在线程跳到下一个演员之前。

但是,PinnedDispatcher

  

为每个演员提供一个独特的线程

所以线程永远不会跳转到另一个角色。

由于难以理解PinnedDispatcher和设置吞吐量的组合,因此在这种情况下会忽略吞吐量设置。

关于你的评论:

  

这意味着最多8 < 10个线程可以在任何一点上取得进展   时间,因此,在任何时间点,2个演员使用   PinnedDispatcher将有空闲线程。

我不认为我理解你的榜样。在我的理解中,线程处于空闲状态意味着actor没有要处理的消息,而不是没有CPU核心可以运行。所有10个都可以运行或空闲,与核心数无关。

  

我试图了解如何控制演员的角色   使用PinnedDispatcher停止进行并被迫空闲   在这种情况下。

你的意思是被迫放弃核心?通过使用PinnedDispatcher,您要将此决定留给操作系统调度程序。你似乎想要&#34;屈服&#34;处理了许多消息后显式的线程。我觉得这很不常见,而不是Akka内置的东西。 &#34;自然&#34;屈服点将在处理吞吐量消息数之后,这将适用于其他类型的调度程序。 为什么你首先使用PinnedDispatcher?