• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

고루틴 클로저 관련

20.08.28 17:37 작성 조회수 122

0

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

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

답변 부탁드립니다.

답변 1

답변을 작성해보세요.

0

 

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



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]