나는 10000 명의 배우를 만들고 각각에게 메시지를 보내지 만, akka 시스템이 모든 작업을 완료 할 수없는 것으로 보입니다. 스레드 상태를 확인할 때 그들은 모두 TIMED_WATIING
입니다.액터가 10000 개를 만들었지 만 액터가 왜 모든 작업을 완료 할 수 없습니까?
내 코드 :
scala.concurrent.blocking {
Thread.sleep(2000)
}
scala.concurrent.blocking
가 차단 관리해야하는 계산을 표시 : (당신이 기본 스레드 풀을 사용하는 경우)
class Reciver extends Actor {
val log = Logging(context.system, this)
var num = 0
def receive = {
case a: Int => log.info(s"[${self.path}] receive $a, num is $num")
Thread.sleep(2000)
log.info(s"[${self.path}] processing $a, num is $num")
num = a
}
}
object ActorSyncOrAsync extends App {
val system = ActorSystem("mysys")
for (i <- 0 to 10000) {
val actor = system.actorOf(Props[Reciver])
actor ! i
}
println("main thread send request complete")
}
아마도 그는 수면 후 메시지 처리 부분을 수행하고 수면을 완전히 제거하기 위해 스케줄러를 사용해야합니다. –
@ 루카스 나는 Thread.sleep이 목적을 디버깅하기위한 것이라고 생각하지만이 정보를 대답에 추가 할 것이다. 감사! – dk14