国产探花免费观看_亚洲丰满少妇自慰呻吟_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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湖北省| 雷波县| 屏山县| 阿城市| 凌海市| 和顺县| 加查县| 江达县| 龙游县| 徐州市| 韶关市| 石景山区| 子长县| 福海县| 三明市| 偏关县| 东丰县| 裕民县| 嘉祥县| 宣武区| 凤山县| 滦南县| 泰兴市| 衡阳市| 岚皋县| 霍州市| 海淀区| 横山县| 通海县| 永登县| 合山市| 盐城市| 闸北区| 阳原县| 襄城县| 公安县| 宜宾市| 美姑县| 扎囊县| 铜陵市| 康平县|