Upload
hyun-dong-lee
View
54
Download
6
Embed Size (px)
Citation preview
Actors in Erlang
이 현 동
http://pigbrain.github.io/
Erlang ?
Ericsson Language Erlang
Erlang
functionallanguage
dynamic type
Erlang
fault-toler-ant
highly-avail-able distribute
Erlang VM
Erlang
hot swap-ping 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
MessageActor 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
PCBProcess 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