Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- window
- range
- go
- mutex
- Linux
- channel
- 책
- File
- GO 언어
- 리뷰
- http
- Callback
- JavaScript
- Close
- C
- Sync
- 영화
- API
- windows
- tcp
- c++
- install
- package
- FOR
- bitcoin
- go언어
- write
- Python
- Golang
- json
Archives
- Today
- Total
Code Habit
Go ) 고루틴 본문
고루틴은 함수를 동시에 실행시키는 기능이다. 스레드보다 문법이 간단하고 리소스를 적게 사용한다.
사용 예제이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package main
import (
"fmt"
"math/rand"
"time"
)
func hello(n int) {
r := rand.Intn(100) // 랜덤한 숫자 생성
time.Sleep(time.Duration(r))// 랜덤한 시간 동안 대기
fmt.Println(n)
}
func main() {
for i:=0; i<100; i++ {
go hello(i) // 고루틴으로 hello 함수 호출
}
fmt.Scanln() // main 함수가 종료되지 않도록 대기
}
|
실행 결과
12
57
56
95
49
97
...
|
고루틴을 종료하려면 함수 안에서 return으로 빠져나오거나 runtime.Goexit 함수를 사용하면 된다. 단, 리턴값은 사용할 수 없다.
Go 언어는 CPU 코어를 한 개만 사용하도록 설정되어 있다. 다음은 시스템의 모든 CPU코어를 사용하는 방법이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package main
import (
"fmt"
"runtime"
)
func main() {
runtime.GOMAXPROCS(runtime.NumCPU()) // CPU 개수를 구한 뒤 사용할 최대 CPU 개수 설정
fmt.Println(runtime.GOMAXPROCS(0)) // 설정 값 출력
s := "Hello, world!"
for i := 0; i < 100; i++ {
go func(n int) { // 익명 함수를 고루틴으로 실행
fmt.Println(s, n)
}(i)
}
fmt.Scanln() // main 함수가 종료되지 않도록 대기
}
|
실행 결과
CPU 코어 개수 : 8
Hello, world! 4
Hello, world! 0
Hello, world! 1
Hello, world! 2
... |
runtime.NumCPU 함수로 현재 시스템의 CPU 코어 개수를 구한 뒤 runtime.GOMAXPROCS 함수에 설정해 준다. 이렇게 하면 모든 CPU코어에서 고루틴을 실행 할 수 있다. runtime.GOMAXPROCS 함수에 0을 넣으면 설정 값은 바꾸지 않으며 현재 설정 값만 리턴한다.