Go
Go : κ³ λ£¨ν΄(goroutine), μ±λ(channels)
mokhs
2022. 3. 20. 15:27
κ°μ
- κ³ λ£¨ν΄(goroutine)κ³Ό μ±λ(channel)μ λν΄μ μμ보μ
κ³ λ£¨ν΄(goroutine)
- κ³ λ£¨ν΄μ Goλ°νμμμ λΉλκΈ° μ²λ¦¬λ₯Ό μ΄μ©ν λμμ±μ μ§μνλ κ²½λ κ°μ μ°λ λμ΄λ€.
- κ°μ μ°λ λλΌλ κ²μ μ€μ λ‘ OSλ 벨μμ μ°λ λκ° μμ±λλ κ²μ΄ μλλΌ μ ν리μΌμ΄μ (Go)λ 벨μμ κ°μμ μ°λ λκ° μμ±λλ κ²μ μλ―Ένλ μ£Όμνμ
- λ°νμμμλ§ λμνκΈ° λλ¬Έμ main λ°νμμ΄ μ’ λ£λλ©΄ λͺ¨λ κ³ λ£¨ν΄μ΄ μ’ λ£λλ μ£Όμνμ
go
ν€μλλ₯Ό μ΄μ©ν΄ κ³ λ£¨ν΄μ μ μΈνλ€- λ€μ μμλ₯Ό ν΅ν΄μ κ³ λ£¨ν΄μ μ¬μ©λ²μ μμ보μ
import (
"fmt"
"time"
)
func main() {
// go ν€μλλ₯Ό μ΄μ©ν΄ κ³ λ£¨ν΄ μμ± -> λμμ μ€νλ¨. μ 체 μΆλ ₯μ 보면μ μ΄ν΄ν΄λ³΄μ
go bar("foo")
bar("bar")
/* μ 체 μΆλ ₯
bar 0
foo 0
foo 1
bar 1
bar 2
foo 2
*/
}
func bar(name string) {
for i := 0; i < 10; i++ {
fmt.Println(name, i)
time.Sleep(time.Second)
}
}
channels
- κ³ λ£¨ν΄ κ°μ channelμ μ΄μ©ν΄ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μ μ μλ€
chan
νμ μ μ΄μ©νλ©° λ³΄ν΅ κ³ λ£¨ν΄μΌλ‘ μ¬μ©ν ν¨μμ 맀κ°λ³μλ‘ μ±λμ μ λ¬νλ μμΌλ‘ μ¬μ©νλ€- μ±λμ λ°μ΄ν°λ₯Ό μ λ¬ν λλ
channel <- true
μ κ°μ νμμΌλ‘ μμ±νλ€ - channelμ μ μ‘λ λ°μ΄ν°λ
<-channel
μ μ΄μ©ν΄ λ°μ μ μλ€ - λ€μ μμλ₯Ό ν΅ν΄ μμ보μ
- *μ€μ : main λ°νμμ΄ μ’ λ£ μμ κ³ λ£¨ν΄μ΄ λͺ¨λ μ’ λ£λλ―λ‘ μ΄ μ μ νμ μ£Όμνμ
func foo(person string, channel chan bool) {
time.Sleep(time.Second * 3)
fmt.Println(person)
channel <- true
}
func main() {
channel := make(chan bool)
people := [2]string{"a", "b"}
for _, person := range people {
go foo(person, channel)
}
for range people {
fmt.Println(<-channel)
}
}