SlideShare a Scribd company logo
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
1
2
3 4
5 6
채널(Channel)
1. 채널 버퍼
링 Channel
1
2
3 4
Channel
Channel
Channel
채널(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를 통해 대기중인 고
루틴을 모두 깨운다.
동기화 객체(대기그룹)
대기 그룹에 고루틴 개수를 추가
대기 그룹에 고루틴이 끝났음을 알림
대기 그룹에 추가된 모든 고루틴이 끝
날때 까지 기다림

More Related Content

PDF
동시성 프로그래밍 기초 in GO
PPTX
리플렉션과 가비지 컬렉션
PPTX
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
PDF
Direct x 12 초기화
PDF
함수형 프로그래밍
PDF
Memory & object pooling
PDF
LockFree Algorithm
PPTX
[160402_데브루키_박민근] UniRx 소개
동시성 프로그래밍 기초 in GO
리플렉션과 가비지 컬렉션
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
Direct x 12 초기화
함수형 프로그래밍
Memory & object pooling
LockFree Algorithm
[160402_데브루키_박민근] UniRx 소개

What's hot (20)

PPTX
Multi-thread : producer - consumer
PDF
Concurrency in action - chapter 7
PDF
Asynchronous 101 - (1)
PDF
안드로이드 멀티스레딩 입문 송형주
PDF
Mongo db monitoring 어떤 것이 좋을까(mongodb korea, 김인범)
PDF
Concurrency in action - chapter 5
PPTX
[Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용
PPTX
포스트모템디버깅과 프로세스 덤프 실전
PDF
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
PDF
Asynchronous 101 (2)
PPTX
[데브루키160409 박민근] UniRx 시작하기
PDF
Lock free queue
PDF
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
PPTX
Thread programming
PPTX
병렬 프로그래밍 패러다임
PDF
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
PDF
테라로 살펴본 MMORPG의 논타겟팅 시스템
PPTX
Java memory
PDF
Game programming patterns 2
PDF
Tcp ip & io model
Multi-thread : producer - consumer
Concurrency in action - chapter 7
Asynchronous 101 - (1)
안드로이드 멀티스레딩 입문 송형주
Mongo db monitoring 어떤 것이 좋을까(mongodb korea, 김인범)
Concurrency in action - chapter 5
[Unite17] 유니티에서차세대프로그래밍을 UniRx 소개 및 활용
포스트모템디버깅과 프로세스 덤프 실전
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
Asynchronous 101 (2)
[데브루키160409 박민근] UniRx 시작하기
Lock free queue
제프리 리처의 Windows via C/C++ : 8장 유저 모드에서의 스레드 동기화
Thread programming
병렬 프로그래밍 패러다임
Python Korea 2014년 6월 세미나 - Windows 환경에서 Python 개발환경 세팅하기
테라로 살펴본 MMORPG의 논타겟팅 시스템
Java memory
Game programming patterns 2
Tcp ip & io model
Ad

Similar to Go lang(goroutine, channel, 동기화 객체) (7)

PDF
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
PDF
Io t에서의 소프트웨어단위테스트_접근사례
PDF
[2D4]Python에서의 동시성_병렬성
PPTX
파이썬 병렬프로그래밍
PPTX
Concurrent programming
PPTX
Open Source Engineering V2
PDF
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
Io t에서의 소프트웨어단위테스트_접근사례
[2D4]Python에서의 동시성_병렬성
파이썬 병렬프로그래밍
Concurrent programming
Open Source Engineering V2
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
Ad

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