goroutine称之为Go程是因为现有的术语—线程、协程、进程等等均无法准确传达它的含义
goroutine是通过Go的runtime管理的一个轻量级线程管理器
goroutine是Go并行设计的核心
go语句开启一个goroutine
package main
import (
"log"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
log.Println(i, s, &s)
}
}
func main() {
// go 语句执行一个函数, 即开启一个goroutine线程
go say("goroutine")
say("sync")
// 这里如果不使用time.Sleep, main函数很快就执行完了
// 子线程还未执行完,整个主线程就结束了, 就不会打印goroutine
time.Sleep(500 * time.Millisecond)
}
打印的内容:
2018/06/03 15:11:23 0 sync 0xc42000e1e0
2018/06/03 15:11:23 1 sync 0xc42000e1e0
2018/06/03 15:11:23 0 goroutine 0xc42009e000
2018/06/03 15:11:23 1 goroutine 0xc42009e000
2018/06/03 15:11:23 2 goroutine 0xc42009e000
2018/06/03 15:11:23 3 goroutine 0xc42009e000
2018/06/03 15:11:23 2 sync 0xc42000e1e0
2018/06/03 15:11:23 3 sync 0xc42000e1e0
2018/06/03 15:11:23 4 sync 0xc42000e1e0
2018/06/03 15:11:23 4 goroutine 0xc42009e000
参考资料:
http://go-tour-zh.appspot.com/