¡Hola, Mondo!

Go Concurrency 본문

Programming/Go

Go Concurrency

베지(Beji) 2016. 6. 10. 17:25




고루틴 (Goroutine)



Channel



Go 클로저 (Closure)




고루틴 대기


1. Scanf, Scanln

고루틴을 이용하면 즉시 다음 줄로 실행 흐름이 반환되고 함수 호출이 완료되기까지 기다리지 않는다.

이러한 이유로 예제 프로그램에서 Scanln 함수를 호출한 것이다.

이 문장이 없으면 프로그램에서는 숫자가 모두 출력되기 전에 프로그램이 종료될 것이다.



2.WaitGroup



Closure[각주:1] (클로저) 사용


클로저를 고루틴으로 실행할 때 반복문 안에서 변수 사용에 주의해야 합니다.
예제에서는 반복문으로 증가하는 i를 클로저에서 그대로 사용하지 않고, 매개변수로 넘겨주었습니다.
일반 클로저는 반복문 안에서 순서대로 실행되지만 고루틴으로 실행한 클로저는 반복문이 끝난 뒤에 고루틴이 실행됩니다.
고루틴은 반복문이 완전히 끝난 다음에 생성되므로 고루틴이 생성된 시점의 변수 i의 값은 10입니다.
클로저를 고루틴으로 실행할 때 반복문에 의해 바뀌는 변수는 반드시 매개변수로 넘겨줍니다.
즉, 매개변수로 넘겨주는 시점에 해당 변수의 값이 복사되므로 고루틴이 생성될 때 그대로 사용할 수 있습니다.
또한, CPU 코어를 하나만 사용하든 여러 개 사용하든 상관없이 반복문에 의해 바뀌는 변수는 매개변수로 넘겨주어야 합니다.








  1. 클로저는 자신의 범위(Scope) 밖에 있는 변수들에 접근할 수 있는 함수를 의미 [본문으로]

'Programming > Go' 카테고리의 다른 글

Json Data to Go Struct : unmarshal vs decode  (0) 2016.09.07
go tool pprof  (0) 2016.06.30
Golang 공부 참고 사이트  (0) 2016.06.10
[CentOS] golang , vim-go 설치  (0) 2016.05.30
Comments