如何基于偶数串行和并行处理这些消息?例如,当i
为2,4,6,8时,并行处理消息。
我认为消息是按顺序处理的,但我如何区分并行处理它们呢?
for(i <- 1 to 100) {
greeter ! WhoToGreet("message: " + i)
inbox.send(greeter, Greet)
val Greeting(message) = inbox.receive(10.seconds)
println(message)
}
我已将application.conf
更改为如下:
akka {
actor{
default-dispatcher {
type = Dispatcher
executor = "thread-pool-executor"
throughput = 100
fork-join-executor {
parallelism-min = 2
parallelism-factor = 2.0
parallelism-max = 8
}
}
}
}
但我不确定这是不是这样或使用par。
我有什么方法可以看到什么时候连续处理并且并行处理?
答案 0 :(得分:1)
演员按顺序处理消息。这是模型的一部分。这可以确保您不必考虑共享状态和锁定等。 在我的拙见中,对于你想要做的事情,你应该使用一些特殊的角色来处理每种消息和/或为它做一些路由器演员。
http://doc.akka.io/docs/akka/snapshot/scala/routing.html
注意:在application.conf中没有任何关于它的信息。
答案 1 :(得分:1)
如果您需要并行处理的消息,则需要多个actor。正如@kaktusito所提到的,一种方法是使用Akka路由器。
您可以实验,并希望拥有多个要并行处理邮件的演员。例如,对于消息#4,最多只能有4个actor。但对于消息#32,您要么使用4或16或32个演员。机器的物理内核数量也将决定您应该并行运行的actor数量。