Versions Compared

Key

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

...

 자신의 상태변경및 제공을 멀티스레드에 안전한 방식으로 OOP를 설계한다고 가정하자

이 클래스는 이야기한다, '내 작업이 끝날때까지, 해당 오브젝트를 건들지마'


OOP는 자신의 속성값 접근및 공유의 원칙으로 설계가 되기 때문에



접근공유문제를 쓰레드를 통해 해결하기위해, 복잡한 쓰레드 모델을(CriticalSection,SpinLock,Mutex,Semaphore) 익혀야하며

객체접근 방식은 메시지 전송모델에서, 확장및 동시성의 문제를 해결하기가 어려워진다.

...

공유라는 속성을 제거함으로 멀티쓰레드와 관련된 문제의 대부분을 제거 하고 시작하다.

공유되지 않기때문에, 임계영역 처리를 위해  'lock' 'synchronized' 와 같은 부자연스러운 키워드가 필요없으며

쓰레드를 생성하고 관리할 필요도 필요가 없어진다.


Code Block
languagec#
titleActor 설계 코드
public class MyActor: ReceiveActor
{
  private readonly ILoggingAdapter log = Context.GetLogger();
  private int state =0;

  public MyActor()
  {
    Receive<string>(message => {
      log.Info("Received String message: {0}", message);
      Sender.Tell(state );
    });
    Receive<SomeMessage>(message => {...});
  }
}



var remoteActor = system.ActorSelection("akka.tcp://MyServer@127.0.0.1:8001/user/someActor");
var state = remoteActor.Ask("Hello").Result; // 질의를 하던지?(Ask),단지 말만한다던지?(Tell)  할수가 있다.


Actor는 오로지 메시만 주고 받으며 동시성을 달성하며,  결과값을 얻기위해서는 객체접근이아닌 질의를 해야한다.

...