Golang的Goroutine大小没有线性增长

时间:2017-10-12 19:00:09

标签: go

以下代码:

const LOOPNUM int = 200000

func main() {
    z := make(chan int16)
    for i := 0; i < LOOPNUM; i++ {
        go test(z)
    }
}

func test(a chan<- int16) {
    a <- -1
}

我使用LOOPNUM = 200k和400k运行代码,内存使用情况如下:

goroutine size comparison

在我将goroutine加倍(以及减少内存使用量的任何解决方案)之后,是否有人知道突然内存增加的原因?

谢谢!

1 个答案:

答案 0 :(得分:0)

你不是在等待goroutines完成,所以它在你做出改变之前就已经退出了。将其更改为:

const LOOPNUM int = 200000
var wg sync.WaitGroup
func main() {
    wg = sync.WaitGroup{}
    wg.Add(LOOPNUM)
    z := make(chan int16)
    for i := 0; i < LOOPNUM; i++ {
        go test(z)
    }
    wg.Wait()
}

func test(a chan<- int16) {
    a <- -1
    wg.Done()
}

你应该更好地了解正在发生的事情。