Versions Compared

Key

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

...

많은 사람이 비동기식으로 개발하면 멀티 스레드를 활용하는것처럼 이해하고 있지만~ 비동기와 멀티스레드는 다른의미 입니다. 비동기 프로그래밍은 단일스레드에서 작업효율을 낼수 있으며  싱글/멀티 스레드로 작동할지는 결정할수 있지만 플랫폼에 따라 싱글스레드로 제약이 될수 있습니다.

  • 동기식 : 계란을 요리 한 다음 토스트를 요리합니다.
  • 비동기식 단일 스레드 : 계란 요리를 시작하고 타이머를 설정합니다. 토스트 요리를 시작하고 타이머를 설정합니다. 둘 다 요리하는 동안 부엌을 청소하십시오. 타이머가 꺼지면 계란을 불에서 꺼내고 토스트를 토스터에서 꺼냅니다.
  • 비동기식, 멀티 스레드 : 계란 요리와 토스트 요리를 위해 두 명의 요리사를 더 고용합니다. 이제 자원을 공유 할 때 요리사가 부엌에서 서로 충돌하지 않도록 요리사를 조정하는 데 문제가 있습니다. 특정 조리기구가 하나만 존재할때 이문제는 발생할수 있습니다.


우리가 보유하고 있는 장비 성능대비 50%이상을 활용하기 어려울수 있으며 다양한 이유로 우리의 단일장비는 안정적으로 작동하기 위해 천천히 작동될수 있습니다.

...

AKKA역시 멀티스레드를 활용하기 때문에  암달의 법칙에서 자유로울수는 없지만,  순차적으로 처리하는 부분에 대한 면적을 최대한 줄이면서 멀티스레드 프로그래밍을 할필요 없게 단순화해주며 동일한 개발컨셉으로 네트워크 분산처리를 지원합니다. 원격에 있는 멀티스레드를 제어할수 있는 효과를 가질수 있으며 분산처리에 용이합니다.

Actor의 메시지큐와 Dispatcher

그러면 Akka에서는 어떻게 병렬성과 동시성문제를 포함 메시지 순차보정을 멀티스레드 프로그래밍 없이 할수 있을까요? 액터모델과 Mailbox Dispatcher 의 조합으로 이해할수 있습니다.

  • 액터 특징 : 단일 액터는 , 자신만의 메시지 Queue를 가질수 있습니다. 병렬로 작동시키기위해서는 멀티스레드가 아닌 액터를 늘릴수 있으며 스레드보다 훨씬 가볍습니다.
  • MailBoxQueue : 모든 발생이벤트는 수행 되기전 Queue에 적재됩니다. 작업완료는 별도의 메시지를 통해 통지 받을수 있으며  있습니다. CQRS를 작성하기에 용이합니다.
  • Dispatcher : 액터에 요청된 이벤트의 수행을 어떠한 스레드전략으로 수행할지 규칙은 Dispatcher에 할수 있으며, 멀티스레드를 이용하지만 멀티스레드 프로그래밍을 할 필요가 없습니다.
  • 액터 : 모든 액터는 메시지로 명령수행이 가능하며 리모트로 확장될시 클러스터 라우터를 통해서도 작업분배가 용이합니다. 이것은 로컬과 리모트의 프로그래밍 방식에 큰차이가 없음을 의미하며 Kafka와 같은 메시징 툴과의 조합도 유리할수 있습니다. ( alpakka 는 Reactive Stream의 구현체로 Akka를 모든곳과 연결을 할수 있는 모듈명입니다. )

...