代码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/

10-10 22:42