在Go程序中默认启动了多少个goroutine?

vrb*_*lgi 2 go goroutine

package main

import (
    //"time"
    "runtime"
    "fmt"
)

func main() {
    //time.Sleep(100 * time.Millisecond)//By adding this number of goroutine increases
fmt.Println(runtime.NumGoroutine())
}
Run Code Online (Sandbox Code Playgroud)

我试图找出程序中的goroutines数量.我的代码在这里.编码时我注意到默认的goroutines数是4.

为了我:

  • 主要是一个goroutine
  • 垃圾收集器是一个goroutine

还有什么?

通过添加time.Sleep(上图),goroutines的数量增加到5.这是什么原因?

Did*_*zia 5

实际上,内存管理需要不止一个goroutine ......

4个最初的goroutines是:

  • 主要的goroutine
  • 后台清扫器(并发的垃圾收集阶段)
  • 清道夫(也是垃圾收集器的一部分)
  • 终结器goroutine(专门运行最终附加到对象的终结器)

然后,调用time.Sleep函数.它需要一个计时器.定时器在运行时通过附加的goroutine(timerproc)实现,后者处理存储在计时器堆中的事件.当第一个计时器添加到堆中时,这个goroutine会延迟启动.

因此,你最终得到5个goroutines.