繁体   English   中英

默认情况下,Go程序中启动了多少个goroutine?

[英]How many goroutines are started by default in a Go program?

package main

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

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

我试图找出程序中的goroutine数量。 我的代码在这里 在编写此代码时,我注意到goroutine的默认数量为4。

为了我:

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

还有什么?

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

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

4个初始goroutine是:

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

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

因此,您最终获得了5个goroutine。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM