고루틴 클로저 관련

미해결질문
김선엽 프로필

안녕하세요.
고루틴 클로저 설명중에
반복문 클로저는 일반적으로 즉시 실행,
But 고루틴 클로저는 가장 나중에 실행(반복문 종료후) 가 어떤 의미인지 잘 아해가 안되는데요.

for문이 끝나고 나서 고루틴이 실행된다는 의미이신가요?
고루틴 안에 sleep 넣어보니 고루틴들이 실행되는거 같아서요.

답변 부탁드립니다.

좋은사람 프로필
좋은사람 4달 전
 

아래 예제에서 실행되는 순서를 생각해보시면 될 것 같습니다.



func A( a, b chan struct{}){ <-a fmt.Println("A()") time.Sleep( time.Second) close(b) } func B( a,b chan struct{}){ <-a fmt.Println("B()") close(b) } func C( a chan struct{}){ <-a fmt.Println("C()") } func main(){ x := make(chan struct{}) y := make(chan struct{}) z := make(chan struct{}) go C(z) go A(x, y) go C(z) go B(y, z) go C(z) close(x) time.Sleep( 3 * time.Second) }
A()
B()
C()
C()
C()

 go C(z)       -> z에 시그널이 들어 오면 동작
go A(x, y)    -> x에 시그널이 들어 오면 y를 닫는다.-> y에 시그널 전달
go C(z)       -> z에 시그널이 들어 오면 동작   
go B(y, z)    -> y에 시그널이 들어 오면 z를 닫는다. -> z에 시그널 전달
go C(z)       -> z에 시그널이 들어 오면 동작
    close(x)      -> x를 닫는다. -> x에 시그널 전달
-->  A -> B -> C -> C -> C

 



출처: https://fenderist.tistory.com/228 [Devman]

출처: https://fenderist.tistory.com/228 [Devman]

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스