主页 > 知识库 > Go语言中使用 buffered channel 实现线程安全的 pool

Go语言中使用 buffered channel 实现线程安全的 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

您可能感兴趣的文章:
  • go原生库的中bytes.Buffer用法
  • C#语言使用gRPC、protobuf(Google Protocol Buffers)实现文件传输功能
  • 详解Django-channels 实现WebSocket实例
  • Django使用Channels实现WebSocket的方法
  • Django Channels 实现点对点实时聊天和消息推送功能
  • 再次探讨go实现无限 buffer 的 channel方法

标签:本溪 湘潭 九江 晋城 深圳 运城 楚雄 喀什

巨人网络通讯声明:本文标题《Go语言中使用 buffered channel 实现线程安全的 pool》,本文关键词  语,言中,使用,buffered,channel,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《Go语言中使用 buffered channel 实现线程安全的 pool》相关的同类信息!
  • 本页收集关于Go语言中使用 buffered channel 实现线程安全的 pool的相关信息资讯供网民参考!
  • 推荐文章