我在akka玩了两个星期,但仍然对一些基本概念感到困惑。
我有一个非常简单的模式,其中包含三种演员:
我将这些演员配置如下:
Master使用以下调度员与RoundRobinRouter(10):
mailbox-capacity = 10000
executor = "fork-join-executor"
fork-join-executor {
parallelism-min = 0
parallelism-max = 600
parallelism-factor = 3.0
}
我在这个系统中有几个worker(ref),它们都接收来自master的消息,并且每个都使用RoundRobinRouter(10)的路由器。
type = Dispatcher
executor = "fork-join-executor"
fork-join-executor {
parallelism-min = 0
parallelism-max = 600
parallelism-factor = 3.0
}
mailbox-capacity = 100000
只是一个演员,用来接收来自工人的结果,并且计数。 它使用与工作人员相同的调度程序。
我对并行性参数和路由器做了一些调整,但性能似乎没有变化。消耗1000万个任务需要80秒,每个任务至少需要500毫秒才能完成。
所以它让我在那里,如果一个调度程序就像一个线程池,如果一个actor在没有使用路由器的情况下使用这个调度程序,那意味着只有一个实例。接收块中的代码是否会并行执行?
以防万一我的代码中的其他内容搞砸了: Gist
这是虚拟机运行此程序:
很抱歉在这里不清楚这个问题。 如果有什么东西可以提高这个性能请告诉我。 任何建议都是受欢迎的。提前谢谢。
抱歉! 这是1000万任务,而不是1亿! 我很抱歉,抱歉!