저는 지금 스칼라 프로젝트를 진행하고 있습니다. 액터 모델보다 Akka의 에이전트 라이브러리를 사용하기로 결정했습니다. 왜냐하면 동시성에 대해보다 기능적으로 접근 할 수 있기 때문입니다. 한 번에 많은 다른 에이전트를 실행하는 문제. 한 번에 3 ~ 4 명의 요원 만 운영하는 데 모자를 씌우는 것처럼 보입니다.Concurrent Accka Agents in Scala
import akka.actor._
import akka.agent._
import scala.concurrent.ExecutionContext.Implicits.global
object AgentTester extends App {
// Create the system for the actors that power the agents
implicit val system = ActorSystem("ActorSystem")
// Create an agent for each int between 1 and 10
val agents = Vector.tabulate[Agent[Int]](10)(x=>Agent[Int](1+x))
// Define a function for each agent to execute
def printRecur(a: Agent[Int])(x: Int): Int = {
// Print out the stored number and sleep.
println(x)
Thread.sleep(250)
// Recur the agent
a sendOff printRecur(a) _
// Keep the agent's value the same
x
}
// Start each agent
for(a <- agents) {
Thread.sleep(10)
a sendOff printRecur(a) _
}
}
위의 코드는 1에서 10 사이의 각 정수를 포함하는 에이전트를 만듭니다. 하단 루프는 모든 에이전트에 printRecur 기능을 보냅니다. 프로그램의 출력에는 1에서 10까지의 숫자가 (아무 순서없이) 인쇄됩니다. 그러나 어떤 이유로 든 내 출력에는 1에서 4까지의 숫자 만 출력됩니다.
Akka에서 작동하는 에이전트를 사용할 수있는 더 표준적인 방법이 있습니까? 나는 clojure 배경에서 왔고 이전에이 패턴을 성공적으로 사용했기 때문에 스칼라에서 같은 패턴을 순진하게 사용했습니다.
sendOff를 사용하여 sendOff가 차이를 만들지는 않았지만 가져 오기를 스왑 아웃했습니다. 감사! – DrPepper