这是一个非常简单的应用程序:
package main
import "fmt"
func main() {
for i:= 0; i < 100000; i++ {
go func (){
fmt.Println("hello message.")
}()
}
fmt.Scanln()
fmt.Println("done")
}
在Windows上运行应用程序后,看看Windows任务管理器,我看到了这种状态:
有人可以说为什么?
答案 0 :(得分:7)
启动的goroutine并发运行,彼此独立。处理这些是goroutine调度程序的责任和义务。
goroutine是一个轻量级线程:它的成本比OS线程低很多,但仍然要花些钱。一个新的goroutine的初始堆栈为几个KB(大约8KB),并根据需要增加/缩小。参见Goroutines 8kb and windows OS thread 1 mb。
鉴于您在不进行任何同步的情况下启动了100,000个goroutine,很可能您要在其中的100,000个goroutine完成运行之前运行它们。估计的内存需求为:
100,000 * 8KB = 800 MB
因此,您使用884MB的应用与估算值基本一致。