Go 程

Go 程(goroutine)是由 Go 运行时管理的轻量级线程。

  1. go f(x, y, z)

会启动一个新的 Go 程并执行

  1. f(x, y, z)

f, x, yz 的求值发生在当前的 Go 程中,而 f 的执行发生在新的 Go 程中。

Go 程在相同的地址空间中运行,因此在访问共享的内存时必须进行同步。sync 包提供了这种能力,不过在 Go 中并不经常用到,因为还有其它的办法(见下一页)。

goroutines.go

  1. package main
  2. import (
  3. "fmt"
  4. "time"
  5. )
  6. func say(s string) {
  7. for i := 0; i < 5; i++ {
  8. time.Sleep(100 * time.Millisecond)
  9. fmt.Println(s)
  10. }
  11. }
  12. func main() {
  13. go say("world")
  14. say("hello")
  15. }