Versions Compared

Key

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

 Dispatcher는 ActorSystem 내에서 실행되는 모든 코드를 스케줄링 합니다.

각 Actor의 처리량과 시간 점유율을 조정하여 각자에게 공정한 리소스를 제공합니다.

구성 변경을 하지 않는한 일반적으로 시나리오에 맞게 최적화 된 .Net ThreadPOOL을 사용합니다.각 프레임워크가 가지고 있는 ThreadPOOL을  각각 활용합니다.

  • JAVA의 경우 JVM에서 제공하는 스레드풀 전략을 사용
  • .net의 경우 .net CLR이 제공하는 스레드풀 전략을 사용


Dispatcher 설정기능을 제공함으로 , 액터그룹별로 다른 성능목표를 가지고 , 성능전략을 세울수가 있습니다.

...

이해하기위해서는 멀티스레드를 구현의 관점이 아닌 이해의 사용 관점에서 알아둘 학습할 필요가 있습니다.


C#이 지원하는 비동기 동시처리 프로그래밍에서  ASYNC ,AWAIT,TASK등의 지원으로 ( .net 45+)

...

Info

지난 몇년간 멀티스레딩 프로그래밍을 통해 개발을 했고 문제를 풀려고 하였습니다.

하지만,5년간 운영하면서 어떠한 한계에 부딪쳤습니다. 스레드문제처리에대해 개발내에 숙련이 유지되지 않는다는점이며

단일기기에서 충분한 사용자처리 성능을 이끌수있으나, 그속에서도 대부분의 운영 로그가 스레드에관한것이고 이것을 해결하는데 골칫거리였습니다.

실제 서비스에관련된 로그가 20%라고 하면 TCP처리및 스레드에관련된 로그가 80%이상이였습니다.

로그의 복잡성은, 개발코드의 복잡성을 반영하며 문제파악및 확장이 어려워집니다.

더욱이 현재 느끼는 심각한문제는, 그렇게 쌓인 팀라이브러리가 AKKA에서 고민하는 추상화된 스레드모델에(디스페쳐) 한참 못미치고

거의 쓰일데가 없다란 것입니다.


오히려 어떠한 동시성을 위한 추상적 레벨의 라이브러리를통해, 제공하는 옵션을 어떻게 이해하고 사용해야하는가?

멀티스레드및 비동기프로그래밍을 어떻게 이해해야하고, 다시 학습하게 되는 계기가 되었습니다.


말이 길었지만 , AKKA에서는 아래와 같은 스레드 옵션을 지원합니다.

  • thread-count - dispatcher 가 사용할 스레드수를 지정합니다.
  • deadlock-timeout - 기본적으로 지정없으면 무한적으로 실행될수 있습니다. 너무 낮은값을 지정하면 작업 손실이 되니 신중하게 값을 설정합니다.
  • threadtype -background,foreground. 두 옵션이 있으며 OS또는 플래폼 특성적이니  how .NET handles 을 참고합니다.

...

  • 사용 자원증가에 따른 최대 한계측정


스레드의 비용

항목비용상세
커널메모리약 1KB스레드 데이터와 속성들을 저장합니다. 이 데이터들은 페이징 될 수 없습니다.
스택영역512KB(일반 스레드), 8MB(OS X 메인 스레드), 1MB(iOS 메인 스레드)일반 스레드의 스택 영역은 최소 16KB이고, 4KB의 배수여야 합니다. 해당 메모리는 스레드가 생성될 때 할당되지만, 실제 사용되기 전까지 페이지가 생성되지는 않습니다.
생성 시간약 90ms스레드 생성 요청부터 스레드 루틴이 시작될 때 까지의 시간

스레드는 스택영역에 생성되기때문에 생성만 되어도 기본적으로 큰 메모리를 차지하게됩니다.  

...