Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

메시지 전송에의해서만, 처리가 되기때문에 확장및 동시성처리에 유연해집니다.


위 그림을 보면, 이러한 의문을 가질수 있습니다.  액터하나당? Thread를 하나사용하는것인가?

그러면 많은 액터를 많이 만들면 안되지 않는가? 

AKKA에서는 스레드풀 옵션에의해 이러한 문제를 튜닝으로 해결이 가능하며 개수 제한가능합니다.

실제 아무일을 하지 않는 액터는 스레드를 점유하지 않습니다. ( dispatcher가 액터들을 스레드풀에의해 효율적으로 관리함)

만약 어떠한 액터가 블락킹(처리시간이 많이걸리는)을 많이 발생하는 액터라고 가정하면.., 빠르게 작동되는 액터와 스레드사용

전략을 분리할 필요가 있습니다.


dispatcher-behaviour-on-good-code.pngImage Added



Code Block
languagescala
linenumberstrue
my-blocking-dispatcher {
  type = Dispatcher
  executor = "thread-pool-executor"
  thread-pool-executor {
    fixed-pool-size = 16
  }
  throughput = 1
}
//이것은 런타임 코드가 아니라, 설정파일에 설정하는 사항입니다.

관련 액터들만, 스레드를 특정개수로 제한할수가 있으며  처리시간이 짧은 액터일경우 훨씬더 작은 수의 스레드로도 충분히 빠르게 작동을 합니다.

실제로 내부 장비에서 액터간 초당 50만 메시지가 처리가능하다라고 함 :  http://letitcrash.com/post/20397701710/50-million-messages-per-second-on-a-single


OOP설계방식으로 패킷을설계하고, TCP전송 프로토콜을 사용하여 멀티스레드 기법으로 고성능 전송을 구현한다고 했을시

1:1 안정적인 고성능 전송기능이될때까지 엄청난 노력을 기울여야할것입니다. (그것이 c++이던 java이던간에)

Akka-Actor모델은 이시간을  클러스터및 분산환경 메시지전송의 개발로직을 짤수있게 도와줍니다. 


이 부분에 대한 실습은 이 부분은 RemotActor,Route 실습에서 조금더 다루도록 하겠습니다.