8.7. Goroutines

Go语言中使用go可以启动一个goroutine。goroutine 和线程的概念类似,和程序共享一个地址空间。

goroutines和支持多路并发草组系统中的协程(coroutines)类似,用户不用关心具体 的实现细节。

  func server(i int) {
      for {
          print(i)
          sys.sleep(10)
      }
  }
  go server(1)
  go server(2)

(需要注意的是server函数中的for循环语句和 C++ while (true)的循环类似。)

Goroutines资源开销小,比较廉价。

go也可以用于启动新定义的内部函数(闭包)为Goroutines。

  var g int
  go func(i int) {
          s := 0
          for j := 0; j < i; j++ { s += j }
          g = s
  }(1000)  // Passes argument 1000 to the function literal.