Golang计算单个Goroutine占用内存

前端之家收集整理的这篇文章主要介绍了Golang计算单个Goroutine占用内存前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一直在想单个Goroutine大概占用多少内存呢?今天无意间在《Concurrency Go》中看到了这段计算单个Goroutine内存占用大小的代码分享给同样有迷惑人。
在Win7 Go1.9环境,大概是8.9KB~9.1KB,确实够小的。。。

package@H_404_5@ main

import@H_404_5@ (
    "fmt"@H_404_5@
    "runtime"@H_404_5@
    "sync"@H_404_5@
)

func@H_404_5@ getGoroutineMemConsume() {
    var@H_404_5@ c chan@H_404_5@ int@H_404_5@
    var@H_404_5@ wg sync.WaitGroup
    const@H_404_5@ goroutineNum = 1e4@H_404_5@ // 1 * 10^4@H_404_5@

    memConsumed := func@H_404_5@() uint64@H_404_5@ {
        runtime.GC() //GC,排除对象影响@H_404_5@
        var@H_404_5@ memStat runtime.MemStats
        runtime.ReadMemStats(&memStat)
        return@H_404_5@ memStat.Sys
    }

    noop := func@H_404_5@() {
        wg.Done()
        <-c //防止goroutine退出,内存被释放@H_404_5@
    }

    wg.Add(goroutineNum)
    before := memConsumed() //获取创建goroutine前内存@H_404_5@
    for@H_404_5@ i := 0@H_404_5@; i < goroutineNum; i++ {
        go@H_404_5@ noop()
    }
    wg.Wait()
    after := memConsumed() //获取创建goroutine后内存@H_404_5@

    fmt.Printf("%.3f KB\n"@H_404_5@,float64@H_404_5@(after-before)/goroutineNum/1000@H_404_5@)
}

猜你在找的Go相关文章