我有一個演員池,其中有100個運行Actor,它們共享一個工作,將其CorePoolSize設置爲100,但將現有的19個消息發送給其中一個演員時,19個消息不會並行化爲19個演員,但只有5個消息並行運行。當這5條消息完成後,接下來的5條消息再次由這些相同的5個角色處理,依此類推。爲什麼我的19條信息並行運行,我在這裏錯過了什麼?爲什麼我在Akka調度演員?
我的代碼基本上是這樣的:
object TestActor {
val dispatcher = Dispatchers.newExecutorBasedEventDrivenWorkStealingDispatcher("pool")
.setCorePoolSize(100)
.setMaxPoolSize(100)
.build
}
class TestActor(val name: Integer) extends Actor {
self.lifeCycle = Permanent
self.dispatcher = TestActor.dispatcher
def receive = {
case num: Integer => { println("Actor: " + name + " Received: " + num)
Thread.sleep(10000)
}
}
}
trait CyclicLoadBalancing extends LoadBalancer { this: Actor =>
val testActors: List[ActorRef]
val seq = new CyclicIterator[ActorRef](testActors)
}
trait TestActorManager extends Actor {
self.lifeCycle = Permanent
self.faultHandler = OneForOneStrategy(List(classOf[Exception]), 5, 5000)
val testActors: List[ActorRef]
override def preStart = testActors foreach { self.startLink(_) }
override def postStop = self.shutdownLinkedActors()
}
val supervisor = actorOf(new TestActorManager with CyclicLoadBalancing {
val testActors = (1 until 100 toList) map (i => actorOf(new TestActor(i)))
}).start
println("Number of Actors: " + Actor.registry.actorsFor(classOf[TestActor]).length)
val testActor = Actor.registry.actorsFor(classOf[TestActor]).head
(1 until 20 toList) foreach { testActor ! _ }
輸出:
Actor: 4 Received: 16
Actor: 3 Received: 17
Actor: 1 Received: 19
Actor: 59 Received: 1
Actor: 2 Received: 18
// 10 secs. are passing..
Actor: 4 Received: 15
Actor: 3 Received: 14
Actor: 1 Received: 13
Actor: 59 Received: 2
Actor: 2 Received: 12
// 10 secs. are passing..
Actor: 4 Received: 11
Actor: 3 Received: 10
Actor: 59 Received: 3
Actor: 2 Received: 8
Actor: 1 Received: 9
// 10 secs. are passing..
Actor: 4 Received: 7
Actor: 3 Received: 6
Actor: 59 Received: 4
Actor: 2 Received: 5
編輯:我使用阿卡1.0
你支持多少個線程? – 2011-04-28 16:40:41
我在哪裏可以找到?我基本上使用這個config.file:http://scalablesolutions.se/akka/docs/akka-0.10/configuration.html我試圖修改核心池大小因子配置,但這並沒有改變任何東西。但我認爲這是默認的調度員.. – rocksteady 2011-04-29 06:41:31