对于包含我的应用程序中的键计算的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? (也可能定义特定于这些actor的线程池)。
答案 0 :(得分:3)
最好从Akka配置中获取线程数(reference.conf
或application.conf
)。以下是解释其配置方式的参考doc。您可以拥有自定义调度程序或默认调度程序,因此最好不要盲目使用下面的代码,而是要了解您实际使用的调度程序。
你可以这样做:
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")