Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Go
(Goroutine, Channel, 동기화객체)
Goroutine(특징)
고루틴은 다른 함수를 동시에 실행 할 수 있는 함수이다
Java에서의 Thread와 같은 개념으로 생각하면 된다
go 키워드와 함께 함수를 작성 하여 고루틴을 실행하면 된다
간편한 사용법
동작시...
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.317746...
채널(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 읽기 뮤텍스...
동기화 객체(뮤텍스)
● 여러 고루틴이 공통 데이터에 순
서 없이 접근하여 처리
● 공통으로 사용되는 데이터에 대
한 처리결과가...뒤죽박죽..
동기화 객체(뮤텍스)
● 여러 고루틴이 공통 데이터에 권
한을 얻어 접근하여 처리
● 공통으로 사용되는 데이터를 처
리하기위에 보호하고 보호를 풀
어 데이터에 대한 동기화 처리를
진행
● 항상 원하는 결과가 도출
동기화 객체(조건변수)
● 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를 통해 대기중인 고
루틴을 모두...
동기화 객체(대기그룹)
대기 그룹에 고루틴 개수를 추가
대기 그룹에 고루틴이 끝났음을 알림
대기 그룹에 추가된 모든 고루틴이 끝
날때 까지 기다림
Upcoming SlideShare
Loading in …5
×

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

1,096 views

Published on

- Go lang ( Goroutine)
- Go lang ( Channel)
- Go lang ( 동기화 객체)

Published in: Software
  • Be the first to comment

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

  1. 1. Go (Goroutine, Channel, 동기화객체)
  2. 2. Goroutine(특징) 고루틴은 다른 함수를 동시에 실행 할 수 있는 함수이다 Java에서의 Thread와 같은 개념으로 생각하면 된다 go 키워드와 함께 함수를 작성 하여 고루틴을 실행하면 된다 간편한 사용법 동작시키려는 함수 앞에 go 키워드만 붙여주면 됨. Performance goroutine : 4 ~ 4.5K
  3. 3. Goroutine vs Thread(Java) VS
  4. 4. Goroutine vs Thread(Java) Thread (Java) Goroutine 개 수 100000 100000 처 리 속 도 5.902s 226.750829ms <CPU> <Memory>
  5. 5. 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
  6. 6. 채널(Channel) 1. 고루틴끼리 데이터를 주고 받고, 실행 흐름을 제어 하는 기능 2. 모든 타입 사용 가능 3. 값이 아닌 레퍼런스 4. 채널에 값 보낼때 a. 채널 <- 값 5. 채널에서 값 가져 올때 a. <- 채널
  7. 7. Channel 채널(Channel) 1. 동기 채널 Channel Channel Channel Channel Channel 1 2 3 4 5 6
  8. 8. 채널(Channel) 1. 채널 버퍼 링 Channel 1 2 3 4 Channel Channel Channel
  9. 9. 채널(Channel) 1. 고루틴과 동기 채널 흐름
  10. 10. 동기화 객체 뮤텍스(sync.Mutex) Lock 뮤텍스 잠금 Unlock 뮤텍스 잠금 해제 읽기 쓰기 뮤텍스(sync.RWMute) Lock 쓰기 뮤텍스 잠금 Unlock 쓰기 뮤텍스 잠금 해제 RLock 읽기 뮤텍스 잠금 RUnlock 읽기 뮤텍스 잠금 해제 조건 변수(sync.Cond) NewCond 조건 변수 생성 Wait 고루틴 실행을 멈추고 대기 Signal 대기하고 있는 고루틴을 깨움 Broadcast 대기하고 있는 모든 고루틴을 깨움 대기그룹(sync.WaitGroup) Add 대기 그룹에 고루틴 개수 추가 Done 고루틴이 끝났다는 것을 알려줄 때 사용 Wait 모든 고루틴이 끝날 때까지 기다림
  11. 11. 동기화 객체(뮤텍스) ● 여러 고루틴이 공통 데이터에 순 서 없이 접근하여 처리 ● 공통으로 사용되는 데이터에 대 한 처리결과가...뒤죽박죽..
  12. 12. 동기화 객체(뮤텍스) ● 여러 고루틴이 공통 데이터에 권 한을 얻어 접근하여 처리 ● 공통으로 사용되는 데이터를 처 리하기위에 보호하고 보호를 풀 어 데이터에 대한 동기화 처리를 진행 ● 항상 원하는 결과가 도출
  13. 13. 동기화 객체(조건변수) ● code.Wait()를 통해 고루틴의 동작을 Wait 한다. ● Signal을 통해 Wait하고 있는 고루틴을 하나씩 깨워 실행한다.
  14. 14. 동기화 객체(조건변수) 실행 대기 고루틴 3 고루틴 2 고루틴 2 cond.Wait()를 만나면 동작 중이 고루틴 Wait 대기 고루틴 3 고루틴 2 고루틴 1 cond.Signal()를 통해 대기중인 고루 틴을 하나씩 깨운다.
  15. 15. 동기화 객체(조건변수) ● code.Wait()를 통해 고루틴의 동작을 Wait 한다. ● Broadcast을 통해 Wait하고 있 는 모든 고루틴을 깨워 실행한다.
  16. 16. 동기화 객체(조건변수) 실행 대기 고루틴 3 고루틴 2 고루틴 2 cond.Wait()를 만나면 동작 중이 고루틴 Wait 대기 고루틴 3 고루틴 2 고루틴 1 cond.Broadcast를 통해 대기중인 고 루틴을 모두 깨운다.
  17. 17. 동기화 객체(대기그룹) 대기 그룹에 고루틴 개수를 추가 대기 그룹에 고루틴이 끝났음을 알림 대기 그룹에 추가된 모든 고루틴이 끝 날때 까지 기다림

×