对于在我的应用程序中包含关键计算的Actor类,我在路由器后面生成了一堆actor:
val concurrency = 4 // to be replaced by something dynamic
val ahoCorasick = AppActorSystem.system.actorOf(MyActorClass.props(ldb)
.withRouter(BalancingPool(nrOfInstances = concurrency)),
name = "foo")
如何获得与核心数或适用于actor系统的线程池大小相关的Actor实例数?例如,每个内核一个Actor,或者等于提供的线程池大小的actor数量?(可能还会定义特定于这些参与者的线程池)。
最好从Akka配置(reference.conf
或application.conf
)中获取线程数。这是解释其配置方式的参考文档。您可以有一个自定义的调度程序,也可以有一个默认的调度程序,所以最好的办法是不要盲目使用下面的代码,而是要了解您实际使用的调度程序。
您可以执行以下操作:
import akka.actor.ActorSystem
import com.typesafe.config.{Config, ConfigFactory}
val conf = ConfigFactory.load().getConfig("akka.actor.default-dispatcher.fork-join-executor")
def getThreadConf(conf: Config): (Int, Int, Int) = {
val parallelismFactor = conf.getInt("parallelism-factor")
val parallelismMin = conf.getInt("parallelism-min")
val parallelismMax = conf.getInt("parallelism-max")
(parallelismFactor, parallelismMin, parallelismMax)
}
println(getThreadConf(conf))
val system = ActorSystem()
println(getThreadConf(system.settings.config.getConfig("akka.actor.default-dispatcher.fork-join-executor")))
默认情况下,您得到:
factor: 3, min: 8, max: 64
检查您使用的调度程序的名称,或使用 val myActor = context.actorOf(Props[MyActor].withDispatcher("my-dispatcher"), "myactor1")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句