--------------------------------------pool.go----------------------------------------------
packagepoolimport(
"sync""io""errors""log")
var(
errsizetoosmall = errors.new("池大小必須為正整數")
errpoolclosed = errors.new("池已關閉")
)//pool 管理一組可以安全地在多個goroutine間共享的資源,被管理資源必須實現io.closer介面
typepoolstruct
//new 建立乙個新池,並限定池大小,並需要乙個建立資源的工廠函式
funcnew(size int, factoryfunc() (io.closer, error)) (*pool, error)
return&pool, nil
}//acquire 從池中獲取乙個資源
func(p *pool) acquire() (io.closer, error)
returnr, nil
// 池中取不到的時候,新建乙個
default:
log.println("acquired","new resource")
returnp.factory()
}}// release 將乙個使用完的資源放回池裡
func(p *pool) release(r io.closer)
select
}// close 關閉池,並關閉池的所有資源
func(p *pool) close()
// 標記池已關閉
p.closed =true
// 清空chan之前需要先關閉,否則會發生死鎖
close(p.resources)
// 關閉資源
forr :=rangep.resources
}
go簡單協程池實現
為防止無限制開啟gorouting造成的cpu效能浪費以及更嚴重的記憶體溢位和程式崩潰,這裡加單實現一下協程池 深入理解 流程圖 實現 package main import fmt time 有關任務的功能 定義乙個任務型別 type task struct 建立乙個task任務 func new...
go語言實現執行緒池
話說真的好久沒有寫部落格了,最近趕新專案,工作太忙了。這一周任務比較少,又可以隨便敲敲了。逛論壇的時候突發奇想,想用go語言實現乙個執行緒池,主要功能是 新增total個任務到執行緒池中,執行緒池開啟number個執行緒,每個執行緒從任務佇列中取出乙個任務執行,執行完成後取下乙個任務,全部執行完成後...
小議記憶體池 資源池
比較簡單的一篇文章。本來是有些地方沒想明白,想分析一下。結果寫著寫著就明白了,才發現如此簡單。留之 簡單的定義 我對一些專業的名詞不怎麼熟悉,沒有很系統的學習過,所以先稍微解釋下我的一點概念上的認識 看見過很多類似的詞,比如 快取記憶體分配 記憶體物件池 物件池 連線池等等。我覺得乙個池已經帶有高速...