go lang(goroutine, channel, 동기화 객체)

17
Go (Goroutine, Channel, 동동동동동 )

Upload: seungkyu-park

Post on 13-Apr-2017

544 views

Category:

Software


3 download

TRANSCRIPT

Go(Goroutine, Channel, 동기화객체 )

Goroutine( 특징 ) 고루틴은 다른 함수를 동시에 실행 할 수 있는 함수이다

Java 에서의 Thread 와 같은 개념으로 생각하면 된다

go 키워드와 함께 함수를 작성 하여 고루틴을 실행하면 된다

간편한 사용법

동작시키려는 함수 앞에 go 키워드만 붙여주면 됨 .

Performance

goroutine : 4 ~ 4.5K

Goroutine vs Thread(Java)

VS

Goroutine vs Thread(Java)Thread(Java)

Goroutine

개수

100000 100000

처 리

속도

5.902s 226.750829ms

<CPU>

<Memory>

Goroutine(CPU)Goroutine(10000)

CPU1 개 1.3399261s

CPU2 개 627.331191ms

CPU3 개 411.830898ms

CPU4 개 353.891209ms

CPU5 개 327.317746ms

CPU6 개 281.244843ms

CPU7 개 273.9026ms

CPU8 개 258.823073ms

채널 (Channel)1. 고루틴끼리 데이터를 주고 받고 , 실행 흐름을

제어하는 기능

2. 모든 타입 사용 가능

3. 값이 아닌 레퍼런스

4. 채널에 값 보낼때

a. 채널 <- 값

5. 채널에서 값 가져 올때

a. <- 채널

Channel

채널 (Channel)1. 동기 채널

Channel Channel

Channel Channel

Channel

12

3 4

5 6

채널 (Channel)1. 채널

버퍼링 Channel1

2

3 4

Channel

ChannelChannel

채널 (Channel)1. 고루틴과 동기 채널

흐름

동기화 객체뮤텍스 (sync.Mutex) Lock 뮤텍스 잠금

Unlock 뮤텍스 잠금 해제

읽기 쓰기 뮤텍스 (sync.RWMute) Lock 쓰기 뮤텍스 잠금

Unlock 쓰기 뮤텍스 잠금 해제

RLock 읽기 뮤텍스 잠금

RUnlock 읽기 뮤텍스 잠금 해제

조건 변수 (sync.Cond) NewCond 조건 변수 생성

Wait 고루틴 실행을 멈추고 대기

Signal 대기하고 있는 고루틴을 깨움

Broadcast 대기하고 있는 모든 고루틴을 깨움

대기그룹 (sync.WaitGroup) Add 대기 그룹에 고루틴 개수 추가

Done 고루틴이 끝났다는 것을 알려줄 때 사용

Wait 모든 고루틴이 끝날 때까지 기다림

동기화 객체 ( 뮤텍스 )

● 여러 고루틴이 공통 데이터에 순서 없이 접근하여 처리

● 공통으로 사용되는 데이터에 대한 처리결과가 ... 뒤죽박죽 ..

동기화 객체 ( 뮤텍스 )

● 여러 고루틴이 공통 데이터에 권한을 얻어 접근하여 처리

● 공통으로 사용되는 데이터를 처리하기위에 보호하고 보호를

풀어 데이터에 대한 동기화 처리를 진행

● 항상 원 하는 결과가 도출

동기화 객체 ( 조건변수 )

● code.Wait() 를 통해 고루틴의 동작을 Wait 한다 .

● Signal 을 통해 Wait 하고 있는 고루틴을 하나씩 깨워 실행한

다 .

동기화 객체 ( 조건변수 )

실행

대기

고루틴 3

고루틴 2

고루틴 2

cond.Wait() 를 만나면 동작 중이 고루틴 Wait

대기

고루틴 3

고루틴 2

고루틴 1

cond.Signal() 를 통해 대기중인 고루틴을 하나씩 깨운다 .

동기화 객체 ( 조건변수 )

● code.Wait() 를 통해 고루틴의 동작을 Wait 한다 .

● Broadcast 을 통해 Wait 하고 있는 모든 고루틴 을 깨워

실행한다 .

동기화 객체 ( 조건변수 )

실행

대기

고루틴 3

고루틴 2

고루틴 2

cond.Wait() 를 만나면 동작 중이 고루틴 Wait

대기

고루틴 3

고루틴 2

고루틴 1

cond.Broadcast 를 통해 대기중인 고루틴을 모두 깨운다 .

동기화 객체 ( 대기그룹 )

대기 그룹에 고루틴 개수를 추가

대기 그룹에 고루틴이 끝났음을 알림

대기 그룹에 추가된 모든 고루틴이 끝날때 까지 기다림