26
Actors in Erlang 이 이 이 http://pigbrain.github.io/

Actors in erlang

Embed Size (px)

Citation preview

Page 1: Actors in erlang

Actors in Erlang

이 현 동

http://pigbrain.github.io/

Page 2: Actors in erlang

Erlang ?

Ericsson Language Erlang

Page 3: Actors in erlang

Erlang

functionallanguage

dynamic type

Page 4: Actors in erlang

Erlang

fault-toler-ant

highly-avail-able distribute

Erlang VM

Page 5: Actors in erlang

Erlang

hot swap-ping of code

Page 6: Actors in erlang

Erlang Syntax

변수

☞ 변수는 값을 오직 한 번만 받을 수 있다

☞ 대부분의 언어에서 = 은 할당문을 나타내지만 얼랭에서 = 는 패턴 매칭 연산을 의미한다 ☞ = 은 변수가 언바운드 상태일 경우에만 할당 연산자처럼 동작한다

Page 7: Actors in erlang

Erlang Syntax

튜플

☞ 튜플은 여러 값들을 그룹으로 만들고 싶을 때 사용한다

☞ 튜플은 선언할 때 자동으로 생성되고 더 이상 사용되지 않을 때 GC 에 의하여 제거된다

Page 8: Actors in erlang

Erlang Syntax

패턴 매칭

☞ 대부분의 언어에서 = 은 할당문을 나타내지만 얼랭에서 = 는 패턴 매칭 연산을 의미한다 ☞ = 은 변수가 언바운드 상태일 경우에만 할당 연산자처럼 동작한다

Page 9: Actors in erlang

Erlang Syntax

Fun (Anonymous Function)

☞ Fun 은 익명 함수이다

☞ Fun 은 함수의 인수가 될 수 있다 ( 함수형 언어에서 함수는 1 계층 )

Page 10: Actors in erlang

Actor Model

Queue (Mail Box)

User 1 User 2

Message

Actor Actor

Page 11: Actors in erlang

Actor Model

Queue (Mail Box)

User 1 User 2

MessageActor Actor

Page 12: Actors in erlang

Actor Model

☞ 액터들은 서로 분리되어 있다

☞ 메시지들은 비동기로 전달된다

☞ 메시지들은 액터에게 직접 전달되는 것이 아니라 메일박스에 전달된다

☞ 액터는 메시지를 전송하기 위해 블로킹되지 않는다

☞ 액터는 수신된 메시지를 순차적으로 처리한다

Mail Box

Page 13: Actors in erlang

Actor Model

Example

Page 14: Actors in erlang

Actor Model

Example

☞ 프로세스를 하나 생성한다☞ Pid 에는 프로세스 아이디가 들어간다

☞ test 모듈의 rpc 함수를 호출한다 ( 메시지를 보낸다 )☞ Pid ! Value 는 프로세스 (Pid) 에게 Value 메시지를 보낸다는 것을 의미한다

Page 15: Actors in erlang

Actor Model

Example

☞ Stack Over Flow ? No. Tail Recursion Optimization

Page 16: Actors in erlang

Actor Model

Actor Actor Actor

☞ 하나의 액터는 하나의 프로세스를 차지한다

Page 17: Actors in erlang

Actor Model

1 개 액터 = 1 개 프로세스

2 개 액터 = 2 개 프로세스 . .

1000 개 액터 = 1000 개 프로세스 . .

10000000 개 액터 = 10000000 개 프로세스

Page 18: Actors in erlang

Erlang Process

Process

PCBProcess Control Block

Message Queue

Stack

Heap

Page 19: Actors in erlang

Erlang Process

Erlang VM

Process

Scheduler Scheduler

OS + Kernel Threads

CPU 1 CPU 2

Process

Run Queues

Run Queues

Steal

Page 20: Actors in erlang

Erlang Process

☞ 얼랭의 Process 는 OS 의 프로세스가 아니다

☞ 얼랭 시스템 내부의 메모리에 할당된 자체적인 프로세스이다

☞ CPU 마다 Run Queue 가 있고 Thread 를 할당 받아서 동작한다

☞ 스케줄러는 강제로 프로세스의 작업을 중단시킬 수 있는 선점형 방식으로 동작한다

☞ 한쪽 Scheduler 가 일을 다 했는데 , 다른 Scheduler 가 바쁘게 일하고 있다면 작업을 훔쳐온다

☞ 일반적인 프로세스가 다른 Scheduler 로 할당되는 것이 Context Switch 인데 얼랭 VM 은 현재 process struct 를 가리키는 pointer 만 변경하는 간단한 작업이다

Page 21: Actors in erlang

Actor Actor

☞ 하나의 액터는 하나의 프로세스이다 ( 독립적인 개체 )

☞ 한 프로세스가 다른 프로세스에 의존할 경우 , 자신이 의존하는 다른 프로세스의 상태를 모니터링 할 필요가 있다

Supervisor

Page 22: Actors in erlang

Supervisor

Actor

☞ 한 프로세스가 다른 프로세스에 의존할 경우 , 자신이 의존하는 다른 프로세스의 상태를 모니터링 할 필요가 있다

Page 23: Actors in erlang

Link / Supervisor

☞ http://pigbrain.github.io/erlang/2015/08/04/ProcessErrorHandle_on_Erlang

☞ http://pigbrain.github.io/erlang/2016/01/08/supervisor_on_Erlang

Page 24: Actors in erlang

Before we finish..

Page 25: Actors in erlang

Before we finish..

Page 26: Actors in erlang

E N D