goroutine
은 Go 런타임에 의해 관리되는 경량 쓰레드이다.go
키워드를 통해 사용가능하다.go f(x,y,z)
새로운 goroutine을 시작한다.
goroutine은 같은 주소의 공간에서 실행되고, 따라서 공유된 메모리는 synchronous
해야한다.
package main
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
time.Sleep(100 * time.Millisecond)
fmt.Println(s)
}
}
func main() {
go say("world")
say("hello")
}
<-
을 통해 값을 주고받는다.ch <- v // 채널 ch에 v를 전송한다.
v := <-ch // ch로 부터 값을 받고,
// 값을 v에 대입한다.
ch := make(chan int)
package main
import "fmt"
func sum(s []int, c chan int) {
sum := 0
for _, v := range s {
sum += v
}
c <- sum // send sum to c
}
func main() {
s := []int{7, 2, 8, -9, 4, 0}
c := make(chan int)
go sum(s[:len(s)/2], c)
go sum(s[len(s)/2:], c)
x, y := <-c, <-c // receive from c
fmt.Println(x, y, x+y)
}