Go Routine
Reference: Go by example, A Tour of Go, ์์ ๋ก ๋ฐฐ์ฐ๋ Go ํ๋ก๊ทธ๋๋ฐ
What is Go routines?
Go runtime์ด ๊ด๋ฆฌํ๋ Lightweight thread
Go์์ "go" keyword๋ฅผ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ํธ์ถํ๋ฉด, runtime ์ ์๋ก์ด
goroutine
์ ์คํํ๋คgoroutine
์ ๋น๋๊ธฐ์ (asynchronously) ์ผ๋ก ํจ์ routine์ ์คํํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ code๋ฅผ ๋์์ (concurrently) ์คํํ๋๋ฐ ์ฌ์ฉ๋๋ค
Why Go routine?
OS Thread ๋ณด๋ค ํจ์ฌ ๊ฐ๋ณ๊ฒ ๋น๋๊ธฐ concurrent ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ๊ธฐ ์ํ์ฌ ๋ง๋ ๊ฒ์ผ๋ก, ๊ธฐ๋ณธ์ ์ผ๋ก Go runtime์ด ์์ฒด ๊ด๋ฆฌํ๋ค
Go runtime
์์์ ๊ด๋ฆฌ๋๋ ์์ ๋จ์์ธ ์ฌ๋ฌgoroutine
๋ค์ ํ๋์ OS Thread๋ก ์คํ๋๋ค์ฆ, goroutine๋ค์ OS Thrad์ 1:1๋ก ๋์๋์ง ์๊ณ , multiplexing์ผ๋ก ํจ์ฌ ์ ์ OS Thread๋ฅผ ์ฌ์ฉํ๋ค
Memory ์ธก๋ฉด์์๋ OS Thread๊ฐ 1MB์ stack์ ๊ฐ๋ ๋ฐ๋ฉด, goroutine์ ์ด๋ณด๋ค ํจ์ฌ ์์ ๋ช KB์ stack์ ๊ฐ๋๋ค
Go runtime
์ goroutine์ ๊ด๋ฆฌํ๋ฉด์ Go channel์ ํตํด goroutine ๊ฐ์ ํต์ ์ ์ฝ๊ฒ ํ ์ ์๋๋ก ํ๋ค
ex)
package main
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 10; i++ {
fmt.Println(s, "---->", i)
}
}
func main() {
// 1. The Synchronous way
say("Sync")
// 2. Go routines
go say("Async 1")
go say("Async 2")
go say("Async 3")
// Sleep for 3 sec
time.Sleep(time.Second * 3)
}
Last updated
Was this helpful?