猿问

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())

}

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


为了我:


main 是一个 goroutine

垃圾收集器是一个 goroutine

其他人是什么?


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


萧十郎
浏览 229回答 1
1回答

慕田峪4524236

实际上,内存管理需要不止一个 goroutine ...最初的 4 个 goroutine 是:主协程后台清扫器(垃圾收集的并发阶段)清道夫(也是垃圾收集器的一部分)终结器 goroutine(专门运行最终附加到对象的终结器)然后,调用 time.Sleep 函数。它需要一个计时器。定时器在运行时通过一个额外的 goroutine (timerproc) 实现,它处理存储在定时器堆中的事件。当第一个计时器添加到堆中时,这个 goroutine 会延迟启动。因此,您最终获得了 5 个 goroutine。
随时随地看视频慕课网APP

相关分类

Go
我要回答