Development Tip

Akka의 Actor와 Scala의 Actor 모델의 차이점은 무엇입니까?

yourdevel 2020. 10. 24. 12:00
반응형

Akka의 Actor와 Scala의 Actor 모델의 차이점은 무엇입니까?


Akka 배우 모델도 있다는 것을 알게 되었기 때문에 Akka의 Actor와 Scala의 Actor 모델의 차이점이 무엇인지 궁금합니다.


글쎄, 없습니다. 액터 모델 만 있고 Akka 액터와 스칼라 액터는 해당 모델의 두 가지 구현 입니다.

모든 액터 모델은 동시성 프리미티브가 액터라고 말하며 다음을 수행 할 수 있습니다.

  • 다음을 포함하여 메시지를 수신하고 메시지 내용에 따라 다음에 수행 할 작업을 결정합니다.

  • 아는 배우에게 메시지 보내기

  • 새로운 배우 만들기

다음과 같은 특정 보증을 제공합니다.

  • 모든 액터는 한 번에 하나의 메시지 만 처리합니다.

  • 배우 X가 배우 Y에게 보낸 메시지는 전송 된 순서대로 도착합니다.

이 수준에서 Scala와 Akka 액터 사이에는 차이가 없습니다.

수행 할 수있는 작업의 차이점다른 스칼라 액터 구현 개요를 참조하십시오 . 저에게 가장 큰 것은 Akka가 감독자와 ActorRegistry를 지원한다는 것입니다.


역사적인 답변도 있습니다. Scala의 제작자는 행위자 프레임 워크가 있어야한다고 생각했습니다. Jonas Bonér는 시도해 보았지만 완전히 만족하지 않았기 때문에 Akka로 진화 한 새로운 작업을 시작했습니다. 그러나 Scala 사람들은 그것이 자신의 것보다 낫다고 생각했습니다. 그래서 Jfokus 2011에서 그들은 Akka가 Scala의 표준 액터 프레임 워크가 될 것이라고 발표했습니다. 그러나이 마이그레이션에는 시간이 걸립니다.


이것은 "모델"이 의미하는 바에 따라 약간 다릅니다. "실행 모델"또는 "프로그래밍 모델"(및 기타 모델)을 참조 할 수 있습니다.

실행 모델의 경우 기본적으로 스레드 기반 또는 이벤트 기반의 두 가지가 있습니다. Scala 표준 액터 라이브러리에는 둘 다 포함되어 있습니다. 스레드 기반은 각 액터에 대해 하나의 스레드를 사용하는 반면 이벤트 기반은 스레드 풀을 사용합니다. 전자는 이해하기 더 직관적이고 후자는 더 효율적입니다. Akka는 이벤트 기반 모델을 기반으로합니다.

프로그래밍 모델의 경우 스칼라 표준 라이브러리와 Akka간에 큰 차이가 있습니다. 스칼라 표준 라이브러리에서는 기본적으로 "run"메소드를 구현합니다. 수신 메시지를 기다리려면 "receive"또는 "react"를 호출하여 대기 상태가됩니다. 따라서 프로그래밍 모델은 "thread-metaphor"를 따릅니다. 그러나 Akka에서 프로그래밍 은유는 몇 가지 라이프 사이클 메서드를 구현한다는 것입니다. 그러나 "run"메서드는 프레임 워크 내부에 작성됩니다. 실제로이 프로그래밍 모델은 이벤트 기반 실행 모델에서도 훨씬 더 잘 작동합니다.

스칼라 표준 액터의 다양한 실행 모델과 프로그래밍 모델에 관심이 있다면이 문제에 대한 몇 가지 게시물작성 했습니다 .

참고 URL : https://stackoverflow.com/questions/9358408/whats-the-difference-of-the-akkas-actor-with-scalas-actor-model

반응형