• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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语言实现的一个简单Web服务器
    下一篇:Go语言中的Array、Slice、Map和Set使用详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Go语言中使用 buffered channel 实现线程安全的 pool 语,言中,使用,buffered,channel,