Go實現資源池

2021-08-15 12:11:32 字數 1497 閱讀 6034

--------------------------------------pool.go----------------------------------------------

packagepool

import(

"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個執行緒,每個執行緒從任務佇列中取出乙個任務執行,執行完成後取下乙個任務,全部執行完成後...

小議記憶體池 資源池

比較簡單的一篇文章。本來是有些地方沒想明白,想分析一下。結果寫著寫著就明白了,才發現如此簡單。留之 簡單的定義 我對一些專業的名詞不怎麼熟悉,沒有很系統的學習過,所以先稍微解釋下我的一點概念上的認識 看見過很多類似的詞,比如 快取記憶體分配 記憶體物件池 物件池 連線池等等。我覺得乙個池已經帶有高速...