亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

golang實現基于channel的通用連接池詳解

2020-04-01 18:59:10
字體:
來源:轉載
供稿:網友

前言

golang/196413.html">golang/196412.html">golang的channel除了goroutine通信之外還有很多其他的功能,本文將實現一種基于channel的通用連接池。下面話不多說了,來一起看看詳細的介紹吧。

功能

* 連接池中連接類型為interface{},使得更加通用

* 鏈接的最大空閑時間,超時的鏈接將關閉丟棄,可避免空閑時鏈接自動失效問題

* 使用channel處理池中的鏈接,高效

何為通用?

連接池的實現不依賴具體的實例,而依賴某個接口,本文的連接池選用的是io.Closer接口,只要是實現了該接口的對象都可以被池管理。

當然,你可以實現基于interface{}的連接池,這樣任何對象都可以被管理。

實現原理

將連接句柄存入channel中,由于緩存channel的特性,獲取連接時如果池中有連接,將直接返回,如果池中沒有連接,將阻塞或者新建連接(沒超過最大限制的情況下)。

由于面向接口編程,所有創建連接的邏輯是不清楚的,這里需要傳入一個函數,該函數返回一個io.Closer對象。

實現

由于并發問題,在需要操作池中互斥數據的時候需要加鎖。

package poolimport (  "errors"  "io"  "sync"  "time")var (  ErrInvalidConfig = errors.New("invalid pool config")  ErrPoolClosed  = errors.New("pool closed"))type factory func() (io.Closer, error)type Pool interface {  Acquire() (io.Closer, error) // 獲取資源  Release(io.Closer) error   // 釋放資源  Close(io.Closer) error    // 關閉資源  Shutdown() error       // 關閉池}type GenericPool struct {  sync.Mutex  pool    chan io.Closer  maxOpen   int // 池中最大資源數  numOpen   int // 當前池中資源數  minOpen   int // 池中最少資源數  closed   bool // 池是否已關閉  maxLifetime time.Duration  factory   factory // 創建連接的方法}func NewGenericPool(minOpen, maxOpen int, maxLifetime time.Duration, factory factory) (*GenericPool, error) {  if maxOpen <= 0 || minOpen > maxOpen {    return nil, ErrInvalidConfig  }  p := &GenericPool{    maxOpen:   maxOpen,    minOpen:   minOpen,    maxLifetime: maxLifetime,    factory:   factory,    pool:    make(chan io.Closer, maxOpen),  }  for i := 0; i < minOpen; i++ {    closer, err := factory()    if err != nil {      continue    }    p.numOpen++    p.pool <- closer  }  return p, nil}func (p *GenericPool) Acquire() (io.Closer, error) {  if p.closed {    return nil, ErrPoolClosed  }  for {    closer, err := p.getOrCreate()    if err != nil {      return nil, err    }    // todo maxLifttime處理    return closer, nil  }}func (p *GenericPool) getOrCreate() (io.Closer, error) {  select {  case closer := <-p.pool:    return closer, nil  default:  }  p.Lock()  if p.numOpen >= p.maxOpen {    closer := <-p.pool    p.Unlock()    return closer, nil  }  // 新建連接  closer, err := p.factory()  if err != nil {    p.Unlock()    return nil, err  }  p.numOpen++  p.Unlock()  return closer, nil}// 釋放單個資源到連接池func (p *GenericPool) Release(closer io.Closer) error {  if p.closed {    return ErrPoolClosed  }  p.Lock()  p.pool <- closer  p.Unlock()  return nil}// 關閉單個資源func (p *GenericPool) Close(closer io.Closer) error {  p.Lock()  closer.Close()  p.numOpen--  p.Unlock()  return nil}// 關閉連接池,釋放所有資源func (p *GenericPool) Shutdown() error {  if p.closed {    return ErrPoolClosed  }  p.Lock()  close(p.pool)  for closer := range p.pool {    closer.Close()    p.numOpen--  }  p.closed = true  p.Unlock()  return nil}

結論

基于該連接池,可以管理所有io.Closer對象。比如memcached,redis等等,非常方便!

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲视频一区二区| 久久福利视频网| 久久久亚洲国产| 日本精品性网站在线观看| 欧美极品美女电影一区| 国产美女久久久| 久久精品成人欧美大片古装| 精品国偷自产在线视频99| 麻豆精品精华液| 日韩高清免费在线| 欧美日韩国产va另类| 亚洲奶大毛多的老太婆| 色先锋久久影院av| 97成人精品区在线播放| 亚洲精品一区中文| 久久视频这里只有精品| 7m精品福利视频导航| 欧美激情极品视频| 国产成+人+综合+亚洲欧美丁香花| 日韩在线观看免费| 久久久精品视频成人| 最新91在线视频| 国产欧美日韩丝袜精品一区| 国产精品7m视频| 欧美视频专区一二在线观看| 欧洲美女7788成人免费视频| 国产精品视频公开费视频| 日韩成人在线网站| 欧美最近摘花xxxx摘花| 欧美老女人xx| 欧美第一黄网免费网站| 成人免费xxxxx在线观看| 久久久在线免费观看| 日韩中文字幕免费| 日韩av免费一区| 色香阁99久久精品久久久| 18性欧美xxxⅹ性满足| 欧美综合激情网| 欧美巨乳美女视频| 欧美激情国产日韩精品一区18| 国产精品免费视频久久久| 国产一区二区丝袜高跟鞋图片| 成人av在线网址| 国产精品视频久| 成人有码在线播放| 成人午夜在线影院| www.欧美精品一二三区| 亚洲欧美中文日韩在线| 日韩精品免费一线在线观看| 亚洲成人久久久久| 精品久久久久久久久久国产| 亚洲天堂视频在线观看| 亚洲第一色中文字幕| www.亚洲男人天堂| 亚洲国产成人精品电影| 久久97精品久久久久久久不卡| 欧美中文字幕视频在线观看| 国产一区深夜福利| 亚洲免费av网址| 国产精品一区二区久久国产| 日韩中文字幕在线视频播放| 日韩在线观看免费全| 亚洲欧美国产视频| 国产视频福利一区| 日韩在线欧美在线| 国产精品一二三视频| 久精品免费视频| 亚洲天堂av在线免费| 中文字幕av一区| 国产成人在线一区| 最新69国产成人精品视频免费| 国产精品吹潮在线观看| 国产精品欧美日韩一区二区| 日韩hd视频在线观看| 国产91九色视频| 欧美成人一区在线| 国产精品视频久久久| 日本久久久久久| 97精品伊人久久久大香线蕉| 日韩视频在线免费| 91中文在线视频| 日韩高清av一区二区三区| 国产一区二区欧美日韩| 欧美高清第一页| 国产精品久久久久免费a∨大胸| 一道本无吗dⅴd在线播放一区| 久久久之久亚州精品露出| 亚洲第一天堂av| 日韩欧美国产骚| 亚洲福利精品在线| 91av在线免费观看视频| 日韩亚洲精品电影| 中文字幕欧美精品在线| 精品偷拍一区二区三区在线看| 中文字幕日韩电影| 国产精品美女久久| 91精品免费久久久久久久久| 伊人精品在线观看| 日日骚久久av| 欧美不卡视频一区发布| 亚洲字幕一区二区| 亚洲免费精彩视频| 在线观看中文字幕亚洲| 国产精品极品美女在线观看免费| 久久久精品一区二区| 久久久久久噜噜噜久久久精品| 国产精品人人做人人爽| 日韩久久精品电影| 韩国v欧美v日本v亚洲| 色噜噜国产精品视频一区二区| 日韩最新中文字幕电影免费看| 亚洲色图17p| 日韩经典中文字幕| 国产精品福利小视频| 97精品国产97久久久久久春色| 91精品国产网站| www.亚洲一区| 欧美成人午夜剧场免费观看| 成人国产在线视频| 亚洲国产一区二区三区四区| 狠狠色狠狠色综合日日五| 精品中文字幕久久久久久| 亚洲香蕉av在线一区二区三区| 中文字幕欧美精品日韩中文字幕| 亚洲欧美国产精品| 久久久女人电视剧免费播放下载| 国模吧一区二区| 色爱av美腿丝袜综合粉嫩av| 高潮白浆女日韩av免费看| 亚洲欧美日韩视频一区| 日韩小视频在线| 国模精品视频一区二区| 欧美中文在线观看国产| 日韩精品一区二区三区第95| 亚洲一区二区三区在线视频| 日韩经典一区二区三区| 91久久精品国产91久久| 成人h猎奇视频网站| 亚洲天堂网站在线观看视频| 在线日韩av观看| 91在线网站视频| 久久在线免费观看视频| 成人免费观看a| 中文字幕9999| 精品中文字幕在线观看| 欧美日韩国产一中文字不卡| 国产欧美一区二区三区在线看| 国产一区二区激情| 亚洲一区二区久久久久久| 精品人伦一区二区三区蜜桃网站| 国产97在线观看| 欧美性在线视频| 国语自产偷拍精品视频偷| 中文字幕日韩欧美在线视频| 粉嫩av一区二区三区免费野| 第一福利永久视频精品| 中文字幕精品—区二区| 精品一区二区三区四区在线| 久久久久久久亚洲精品| 日韩av大片免费看| 欧美大片第1页| 91精品久久久久久久久久入口| 午夜精品久久久久久久久久久久| 欧美国产视频日韩|