[轉載]golang sync.Pool

Go 1.3 的sync包中加入一個新特性:Pool。golang

官方文檔能夠看這裏http://golang.org/pkg/sync/#Pool設計

這個類設計的目的是用來保存和複用臨時對象,以減小內存分配,下降CG壓力。code

type Pool  
        func (p *Pool) Get() interface{}  
        func (p *Pool) Put(x interface{}) 
func New() interface{}

Get返回Pool中的任意一個對象。對象

若是Pool爲空,則調用New返回一個新建立的對象。ip

若是沒有設置New,則返回nil。內存

還有一個重要的特性是,放進Pool中的對象,會在說不許何時被回收掉。文檔

因此若是事先Put進去100個對象,下次Get的時候發現Pool是空也是有可能的。字符串

不過這個特性的一個好處就在於不用擔憂Pool會一直增加,由於Go已經幫你在Pool中作了回收機制。get

這個清理過程是在每次垃圾回收以前作的。垃圾回收是固定兩分鐘觸發一次。pip

並且每次清理會將Pool中的全部對象都清理掉!

package main
import(
    "sync"
    "log"
)
func main(){
    // 創建對象
    var pipe = &sync.Pool{New:func()interface{}{return "Hello,BeiJing"}}
    // 準備放入的字符串
    val := "Hello,World!"
    // 放入
    pipe.Put(val)
    // 取出
    log.Println(pipe.Get())
    // 再取就沒有了,會自動調用NEW
    log.Println(pipe.Get())
}

// 輸出

2014/09/30 15:43:30 Hello,World!

2014/09/30 15:43:30 Hello,BeiJing

相關文章
相關標籤/搜索