代码A:
MaxCnt := 1000000
wg := sync.WaitGroup{}
wg.Add(MaxCnt)
for i:=0; i<MaxCnt; i++ {
go func() {
time.Sleep(time.Millisecond)
wg.Done()
}()
}
wg.Wait()
代码B:
MaxCnt := 1000000
wg := sync.WaitGroup{}
wg.Add(MaxCnt)
for i:=0; i<MaxCnt; i++ {
go func() {
wg.Done()
}()
}
wg.Wait()
代码A使用大约460 MB的内存,代码B使用一些KB的内存,它们都执行10k次。我想知道为什么?
最佳答案
他们不做1万次,而是做100万次。第一个等待1毫秒时,创建了数千个goroutine,每个goroutine具有2K堆栈。如果那花费了460M,那么在完成所有操作后,您将拥有约23万个 Activity 的并发goroutine。第二个程序在创建相同数量的goroutine时,它们会迅速终止,从而使 Activity 的并发goroutine的数量大大减少。
关于go - 下面的两个go代码有什么区别,为什么要使用这么多不同的内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58871294/