golang sync.Pool

mac2026-02-12  10

Pool模式是一种创建和提供可供使用的固定数量实例或Pool实例的方法。它通常用于约束创建昂贵的场景,如数据库连接,以便只创建固定数量的实例,但不确定数量的操作任然可以请求访问这些场景。对于Go语言的sync.Pool,这种数据类型可以被多个goroutine安全地使用。 下面是一个简单的例子。

package main import ( "fmt" "sync" ) func main() { var numCalcsCreate int calcPool := &sync.Pool { New: func() interface{} { numCalcsCreate += 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.", numCalcsCreate) }

输出: 6 calculators were created.

最新回复(0)