国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

Go語言中使用 buffered channel 實現線程安全的 pool

2020-04-01 19:24:24
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Go語言中使用 buffered channel 實現線程安全的 pool,因為Go語言自帶的sync.Pool并不是很好用,所以自己實現了一線程安全的 pool,需要的朋友可以參考下
 

概述

我們已經知道 Go 語言提供了 sync.Pool,但是做的不怎么好,所以有必要自己來實現一個 pool。

給我看代碼:

 

復制代碼代碼如下:

type Pool struct {
  pool chan *Client
}

 

// 創建一個新的 pool
func NewPool(max int) *Pool {
  return &Pool{
    pool: make(chan *Client, max),
  }
}

// 從 pool 里借一個 Client
func (p *Pool) Borrow() *Client {
  var cl *Client
  select {
  case cl = <-p.pool:
  default:
    cl = newClient()
  }
  return cl
}

// 還回去
func (p *Pool) Return(cl *Client) {
  select {
  case p.pool <- cl:
  default:
    // let it go, let it go...
  }
}

 

總結

現在不要使用 sync.Pool


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 耿马| 蒲城县| 南木林县| 勐海县| 东莞市| 平果县| 怀集县| 洪泽县| 临桂县| 旅游| 丰县| 进贤县| 上杭县| 绿春县| 德昌县| 远安县| 郎溪县| 满洲里市| 林口县| 体育| 营山县| 宁德市| 江津市| 太湖县| 洪湖市| 普宁市| 阳山县| 汽车| 克什克腾旗| 永平县| 昭苏县| 唐山市| 合水县| 曲水县| 崇州市| 临猗县| 巩义市| 保山市| 太湖县| 龙井市| 陇西县|