goroutine

  • 定义:goroutine是轻量级的用户态线程,可以在代码里创建成千上万个goroutine来并发工作。如此多的goroutine是Go运行时来调度的。Go运行时会把goroutine的任务分配给CPU去执行。
  • Go编程里不需要自己在代码里写线程和协程,想让某个任务并发执行,就把这个任务封装为一个函数,然后启动一个goroutine去执行这个函数就行了。
  • Go会为main()函数创建一个默认的goroutine,如果main()函数结束了,那所有在main()中启动的goroutine都会立马结束
  1. package main
  2. import "fmt"
  3. func hello() {
  4. fmt.Println("hello")
  5. }
  6. func main() {
  7. /*开启一个goroutine去执行hello函数*/
  8. go hello()
  9. fmt.Println("main end")
  10. }

执行结果可能有以下3种:

// 只打印main end main end // 先打印main end,再打印hello main end hello // 先打印hello,再打印main end hello main end

这是因为main函数的goroutine和hello这个goroutine是并发执行的,有可能main执行完了,hello还没执行,这个时候只打印main end。有可能hello先执行完,main后执行完,也可能反过来