오늘은 고루틴에 대해서 간단하게 정리합니다.
고루틴은 개념은 아주 심플합니다.
고루틴으로 처리하면 6초정도 걸릴 실행시간이 순차적으로 처리할 경우 11초 정도로 늘어납니다.
package main
import (
"fmt"
"sync"
"time"
)
var wg sync.WaitGroup
func main() {
go sexyCount("AAA")
fmt.Println("******************")
go sexyCount("BBB ")
wg.Add(2)
wg.Wait()
}
func sexyCount(person string) {
for i := 0; i < 5; i++ {
fmt.Println(person, "is sexy", i)
time.Sleep(time.Millisecond * 1000)
}
wg.Done()
}
고루틴을 사용하기 위해서는
1. sync.WatiGroup 을 선언
2. 사용하려는 함수명 앞에 go 를 추가해주기
3. 고루틴이 개수 설정, Add(2).
4. main 함수내부에서는 모든 고루틴이 끝날때까지 기다리도록 Wait() 호출
5. 고루틴으로 호출된 함수내부에서는 완료시, Done() 호출
[Running] go run "d:\workspace\GO\nomad\main.go"
******************
BBB is sexy 0
AAA is sexy 0
AAA is sexy 1
BBB is sexy 1
BBB is sexy 2
AAA is sexy 2
AAA is sexy 3
BBB is sexy 3
AAA is sexy 4
BBB is sexy 4
[Done] exited with code=0 in 5.92 seconds
- 고루틴으로 처리하지 않은 순차처리 코드.
package main
import (
"fmt"
"time"
)
func main() {
sexyCount("AAA")
fmt.Println("******************")
sexyCount("BBB ")
}
func sexyCount(person string) {
for i := 0; i < 5; i++ {
fmt.Println(person, "is sexy", i)
time.Sleep(time.Millisecond * 1000)
}
}
[Running] go run "d:\workspace\GO\nomad\main.go"
AAA is sexy 0
AAA is sexy 1
AAA is sexy 2
AAA is sexy 3
AAA is sexy 4
******************
BBB is sexy 0
BBB is sexy 1
BBB is sexy 2
BBB is sexy 3
BBB is sexy 4
[Done] exited with code=0 in 11.052 seconds
'GO lang' 카테고리의 다른 글
[GO] Scrapping(2) - Echo server (0) | 2021.10.15 |
---|---|
[GO] Scrapping(1) - URL checker (0) | 2021.10.07 |
[GO] channel (0) | 2021.10.07 |
[GO] 자료구조 - map/dictionary (0) | 2021.10.06 |
[GO] 커스텀 패키지 만들기 (0) | 2021.10.06 |