Actors in erlang

Preview:

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

Recommended