Actors in Erlang
이 현 동
http://pigbrain.github.io/
Erlang ?
Ericsson Language Erlang
Erlang
functional
language
dynamic type
Erlang
fault-toleranthighly-available distribute
Erlang VM
Erlang
hot swapping of
code
Erlang Syntax
변수
☞ 변수는 값을 오직 한 번만 받을 수 있다
☞ 대부분의 언어에서 =은 할당문을 나타내지만 얼랭에서 =는 패턴 매칭 연산을 의미한다
☞ =은 변수가 언바운드 상태일 경우에만 할당 연산자처럼 동작한다
Erlang Syntax
튜플
☞ 튜플은 여러 값들을 그룹으로 만들고 싶을 때 사용한다
☞ 튜플은 선언할 때 자동으로 생성되고 더 이상 사용되지 않을 때 GC에 의하여 제거된다
Erlang Syntax
패턴 매칭
☞ 대부분의 언어에서 =은 할당문을 나타내지만 얼랭에서 =는 패턴 매칭 연산을 의미한다
☞ =은 변수가 언바운드 상태일 경우에만 할당 연산자처럼 동작한다
Erlang Syntax
Fun (Anonymous Function)
☞ Fun은 익명 함수이다
☞ Fun은 함수의 인수가 될 수 있다 (함수형 언어에서 함수는 1계층)
Actor Model
Queue (Mail Box)
User 1 User 2
Message
Actor Actor
Actor Model
Queue (Mail Box)
User 1 User 2
Message
Actor Actor
Actor Model
☞ 액터들은 서로 분리되어 있다
☞ 메시지들은 비동기로 전달된다
☞ 메시지들은 액터에게 직접 전달되는 것이 아니라 메일박스에 전달된다
☞ 액터는 메시지를 전송하기 위해 블로킹되지 않는다
☞ 액터는 수신된 메시지를 순차적으로 처리한다
Mail Box
Actor Model
Example
Actor Model
Example
☞ 프로세스를 하나 생성한다
☞ Pid에는 프로세스 아이디가 들어간다
☞ test 모듈의 rpc함수를 호출한다 (메시지를 보낸다)
☞ Pid ! Value 는 프로세스(Pid)에게 Value 메시지를 보낸다는 것을 의미한다
Actor Model
Example
☞ Stack Over Flow ? No. Tail Recursion Optimization
Actor Model
Actor Actor Actor
☞ 하나의 액터는 하나의 프로세스를 차지한다
Actor Model
1개 액터 = 1개 프로세스
2개 액터 = 2개 프로세스
.
.
1000개 액터 = 1000개 프로세스
.
.
10000000개 액터 = 10000000개 프로세스
Erlang Process
Process
PCB
Process Control Block
Message Queue
Stack
Heap
Erlang Process
Erlang VM
Process
Scheduler Scheduler
OS + Kernel Threads
CPU 1 CPU 2
Process
Run
Queues
Run
Queues
Steal
Erlang Process
☞ 얼랭의 Process는 OS의 프로세스가 아니다
☞ 얼랭 시스템 내부의 메모리에 할당된 자체적인 프로세스이다
☞ CPU 마다 Run Queue가 있고 Thread를 할당 받아서 동작한다
☞ 스케줄러는 강제로 프로세스의 작업을 중단시킬 수 있는 선점형 방식으로 동작한다
☞ 한쪽 Scheduler가 일을 다 했는데, 다른 Scheduler가 바쁘게 일하고 있다면 작업을 훔쳐온다
☞ 일반적인 프로세스가 다른 Scheduler로 할당되는 것이 Context Switch인데 얼랭 VM은
현재 process struct를 가리키는 pointer만 변경하는 간단한 작업이다
Actor Actor
☞ 하나의 액터는 하나의 프로세스이다 (독립적인 개체)
☞ 한 프로세스가 다른 프로세스에 의존할 경우, 자신이 의존하는 다른 프로세스의 상태를 모니터링
할 필요가 있다
Supervisor
Supervisor
Actor
☞ 한 프로세스가 다른 프로세스에 의존할 경우, 자신이 의존하는 다른 프로세스의 상태를 모니터링
할 필요가 있다
Link / Supervisor
☞ http://pigbrain.github.io/erlang/2015/08/04/ProcessErrorHandle_on_Erlang
☞ http://pigbrain.github.io/erlang/2016/01/08/supervisor_on_Erlang
Before we finish..
Before we finish..
E N D

Actors in erlang

  • 1.
    Actors in Erlang 이현 동 http://pigbrain.github.io/
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
    Erlang Syntax 변수 ☞ 변수는값을 오직 한 번만 받을 수 있다 ☞ 대부분의 언어에서 =은 할당문을 나타내지만 얼랭에서 =는 패턴 매칭 연산을 의미한다 ☞ =은 변수가 언바운드 상태일 경우에만 할당 연산자처럼 동작한다
  • 7.
    Erlang Syntax 튜플 ☞ 튜플은여러 값들을 그룹으로 만들고 싶을 때 사용한다 ☞ 튜플은 선언할 때 자동으로 생성되고 더 이상 사용되지 않을 때 GC에 의하여 제거된다
  • 8.
    Erlang Syntax 패턴 매칭 ☞대부분의 언어에서 =은 할당문을 나타내지만 얼랭에서 =는 패턴 매칭 연산을 의미한다 ☞ =은 변수가 언바운드 상태일 경우에만 할당 연산자처럼 동작한다
  • 9.
    Erlang Syntax Fun (AnonymousFunction) ☞ Fun은 익명 함수이다 ☞ Fun은 함수의 인수가 될 수 있다 (함수형 언어에서 함수는 1계층)
  • 10.
    Actor Model Queue (MailBox) User 1 User 2 Message Actor Actor
  • 11.
    Actor Model Queue (MailBox) User 1 User 2 Message Actor Actor
  • 12.
    Actor Model ☞ 액터들은서로 분리되어 있다 ☞ 메시지들은 비동기로 전달된다 ☞ 메시지들은 액터에게 직접 전달되는 것이 아니라 메일박스에 전달된다 ☞ 액터는 메시지를 전송하기 위해 블로킹되지 않는다 ☞ 액터는 수신된 메시지를 순차적으로 처리한다 Mail Box
  • 13.
  • 14.
    Actor Model Example ☞ 프로세스를하나 생성한다 ☞ Pid에는 프로세스 아이디가 들어간다 ☞ test 모듈의 rpc함수를 호출한다 (메시지를 보낸다) ☞ Pid ! Value 는 프로세스(Pid)에게 Value 메시지를 보낸다는 것을 의미한다
  • 15.
    Actor Model Example ☞ StackOver Flow ? No. Tail Recursion Optimization
  • 16.
    Actor Model Actor ActorActor ☞ 하나의 액터는 하나의 프로세스를 차지한다
  • 17.
    Actor Model 1개 액터= 1개 프로세스 2개 액터 = 2개 프로세스 . . 1000개 액터 = 1000개 프로세스 . . 10000000개 액터 = 10000000개 프로세스
  • 18.
    Erlang Process Process PCB Process ControlBlock Message Queue Stack Heap
  • 19.
    Erlang Process Erlang VM Process SchedulerScheduler OS + Kernel Threads CPU 1 CPU 2 Process Run Queues Run Queues Steal
  • 20.
    Erlang Process ☞ 얼랭의Process는 OS의 프로세스가 아니다 ☞ 얼랭 시스템 내부의 메모리에 할당된 자체적인 프로세스이다 ☞ CPU 마다 Run Queue가 있고 Thread를 할당 받아서 동작한다 ☞ 스케줄러는 강제로 프로세스의 작업을 중단시킬 수 있는 선점형 방식으로 동작한다 ☞ 한쪽 Scheduler가 일을 다 했는데, 다른 Scheduler가 바쁘게 일하고 있다면 작업을 훔쳐온다 ☞ 일반적인 프로세스가 다른 Scheduler로 할당되는 것이 Context Switch인데 얼랭 VM은 현재 process struct를 가리키는 pointer만 변경하는 간단한 작업이다
  • 21.
    Actor Actor ☞ 하나의액터는 하나의 프로세스이다 (독립적인 개체) ☞ 한 프로세스가 다른 프로세스에 의존할 경우, 자신이 의존하는 다른 프로세스의 상태를 모니터링 할 필요가 있다 Supervisor
  • 22.
    Supervisor Actor ☞ 한 프로세스가다른 프로세스에 의존할 경우, 자신이 의존하는 다른 프로세스의 상태를 모니터링 할 필요가 있다
  • 23.
    Link / Supervisor ☞http://pigbrain.github.io/erlang/2015/08/04/ProcessErrorHandle_on_Erlang ☞ http://pigbrain.github.io/erlang/2016/01/08/supervisor_on_Erlang
  • 24.
  • 25.
  • 26.