장기간의 계산을 (단일 컴퓨터에서) 동시에 실행하려면 Akka 액터가 도움을 줄 수 있습니다.Akka : 액터 생성 및 사서함 채우기
한 가지 방법은 각 작업마다 새 액터를 스폰하는 것입니다. 예를 들어
while(true) {
val actor = system.actorOf(Props[ProcessingActor])
(actor ? msg).map {
...
system.stop(actor)
}
}
두 번째 아이디어는 라우터 뒤에 설정된 액터 수를 구성하는 것입니다. 그런 다음 모든 메시지를 라우터로 보내십시오.
val router = system.actorOf(Props[ProcessingActor].withRouter(RoundRobinRouter(nrOfInstances = 5)))
while(true) {
(router ? msg).map { ... }
}
I 시스템이 과부하되면 더 인 원더 (수신 메시지의 속도는 속도 처리보다 높은)?
어느 것이 오래 걸립니까? 그리고 결국 둘 다 OOMError로 시스템을 날려 버릴 것입니까?
동의 - 미래는 이러한 유형의 사용 사례에 적합합니다. – sourcedelica
@ericacm 동의하지 않습니다. 같은 방식으로 많은 작업을 수행하고 어떤 종류의 오류 처리 (예 : 재시작 오류)가 필요할 것이라는 것을 알고 있다면. 그런 다음 작업을 처리 할 수있는 액터 세트를 정의하면 훨씬 더 신뢰할 수 있습니다. 액터는 메시지에서 수행해야하는 작업을 수신하고 처리하며 응답을 보냅니다. 액터가 충돌하면 (어떤 이유로) 관리자를 다시 시작하고 다시 시도하라는 메시지가 표시됩니다. 선물을 사용하면이 일이 더 힘들 것이라고 믿습니다. (불가능하지는 않지만 어렵습니다.) 그러나 유스 케이스에 달려 있다고 생각합니다. 명확화를 위해 –
Thx. 배우가 메시지보다 비싸다는 것을 알 수 있습니다. – rompetroll