使用Golang sync.Pool节约内存

2019-06-08  本文已影响0人  FredricZhu
package main

import (
    "fmt"
    "sync"
)

func main() {
    var numCalcsCreated int
    calcPool := &sync.Pool{
        New: func() interface{} {
            numCalcsCreated += 1
            mem := make([]byte, 1024)
            return &mem
        },
    }

    //用4kb初始化pool
    calcPool.Put(calcPool.New())
    calcPool.Put(calcPool.New())
    calcPool.Put(calcPool.New())
    calcPool.Put(calcPool.New())

    const numWorkers = 1024 * 1024

    var wg sync.WaitGroup
    wg.Add(numWorkers)

    for i := numWorkers; i > 0; i-- {
        go func() {
            defer wg.Done()
            mem := calcPool.Get().(*[]byte)
            defer calcPool.Put(mem)
        }()
    }

    wg.Wait()

    fmt.Printf("%d calculators were created.\n", numCalcsCreated)
}

程序输出如下,


image.png
上一篇下一篇

猜你喜欢

热点阅读