0

다중 처리를 위해 내 응용 프로그램에서 akka를 사용하고 싶습니다. 따라서 동일한 액터 블록이 각 액터에 의해 실행되고 결과가 리스너에 의해 집계됩니다. 그래서 내 질문에이 경우 동기화 문제가있을 것입니다. 그것이 내부적으로 akka 배우들에 의해 어떻게 처리되고 있는지는 아닙니다.akka를 사용하는 코드 블록에서 동기화

답변

0

기본적으로 액터 접근 방식을 존중하면 동기화 문제 ()가 없어야합니다. 즉, 액터는 변경 불가능한 객체를 포함하는 메시지를 사용하여 통신해야하며, 액터의 내부 상태를 외부 세계에 직접 노출해서는 안됩니다. 수신 된 메시지에 반응하여 내부 상태를 변경/판독 가능하게 만듭니다.

각 액터는 고유 한 ExecutionContext에서 실행됩니다. 즉, 각 액터마다 고유 한 비공개 상태가 있습니다. Akka 액터는 새로운 액터를 만든 후에는 액터 (ActorRef 인스턴스)에 대한 중간 참조 만 가지고 있으므로 기본적으로 "외부 세계"에서 내부 상태에 액세스하는 것은 불가능합니다 (또는 매우 어렵게 만들었습니다). 메모리의 실제 액터 인스턴스에 대한 참조가 아닙니다. Akka 개발자는 개발자가 실제 참조를 얻고 속성에 직접 액세스하는 것을 어렵게 만듭니다. 즉 액터 접근 방식을 깨뜨리는 것은 어렵습니다.

- 다른 한편으로는 공유 된 변경 가능한 객체를 액터로 전달하는 경우, 예를 들어 스레드를 사용하는 것처럼 잠금 및 동기화가 필요한 모든 번거 로움을 갖게됩니다.