Goroutine
고루틴을 알기 전에, 쓰레드부터 알아보자!
쓰레드란는 실행 흐름을 말한다.
프로그램이 실행되면 메모리에 로드가 된다. 기계어 다발의 코드들이 메인함수부터 CPU가 IP를 하나씩 늘려가며 하나의 방향 흐름 으로 실행된다.
멀티쓰레드는 여러개의 실행 흐름이다.
코어(CPU) 가 번갈아가며 쓰레드를 실행시키면서 우리눈에는 동시에 실행되는것처럼 보인다.
사실, CPU는 가만히 있고 OS가 스케쥴링 해주는 것이다.
그런데, 쓰레드 전환시 비용이 발생한다. 이것을 컨텍스트 스위칭이라고 한다.
멀티쓰레드 vs 멀티프로세스 ?
프로그램을 실행하면 메모리에 로드 된다. 계산기 프로그램을 사용하면, 두 개의 계산기 실행
멀티쓰레드 하나의 프로세스에서도 여러 실행흐름이 있다
고루틴은 경량쓰레드다. 새로운 고루틴은 단순히 go 함수_호출로 만든다.
sync.WaitGroup 패키지 사용
1
2
3
4
5
var wg sync.WaitGroup
wg.Add(3) // 작업 개수 설정
wg.Done() // 작업이 완료될 때마다 호출
wg.Wait() // 모든 작업이 완료될 때까지 대기
고루틴 동작원리
고루틴은 OS 쓰레드를 이용하는 경량쓰레드이다.
고루틴과 쓰레드는 다르다. 고루틴은 쓰레드를 이용한다.