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

时间:2015-01-04 07:43:20

标签: 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())
}

我试图找出程序中的goroutines数量。我的code is here。编码时我注意到默认的goroutines数是4。

对我来说:

  • main是一个goroutine
  • 垃圾收集器是一个goroutine

其他人是什么?

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

1 个答案:

答案 0 :(得分:5)

实际上,内存管理需要多个goroutine ......

4个最初的goroutines是:

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

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

因此,你最终获得5个goroutines。