본문 바로가기

GO lang

[GO] 고루틴

오늘은 고루틴에 대해서 간단하게 정리합니다.

고루틴은 개념은 아주 심플합니다.

고루틴으로 처리하면 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