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

 更新时间:2014年10月29日 11:02:31   投稿:junjie  
这篇文章主要介绍了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

相关文章

  • Golang官方限流器time/rate的使用与实现详解

    Golang官方限流器time/rate的使用与实现详解

    限流器是后台服务中十分重要的组件,在实际的业务场景中使用居多。time/rate 包基于令牌桶算法实现限流,本文主要为大家介绍了time/rate的使用与实现,需要的可以参考一下
    2023-04-04
  • Go语言中匿名嵌套和类型嵌套的区别解析

    Go语言中匿名嵌套和类型嵌套的区别解析

    在Go语言中,匿名嵌套结构体和与类型同名的嵌套结构体不是完全等价的,它们有一些重要的区别,这篇文章主要介绍了Go语言中匿名嵌套和类型嵌套的区别,需要的朋友可以参考下
    2023-09-09
  • gorm+gin实现restful分页接口的实践

    gorm+gin实现restful分页接口的实践

    本文主要介绍了gorm+gin实现restful分页接口的实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • CentOS 32 bit安装golang 1.7的步骤详解

    CentOS 32 bit安装golang 1.7的步骤详解

    Go是Google开发的一种编译型,并发型,并具有垃圾回收功能的编程语言。在发布了6个rc版本之后,Go 1.7终于正式发布了。本文主要介绍了在CentOS 32 bit安装golang 1.7的步骤,文中给出了详细的步骤,相信对大家的学习和理解具有一定的参考借鉴价值,下面来一起看看吧。
    2016-12-12
  • golang提示dial tcp 172 .217.163.49:443: connectex: A connection attempt failed解决

    golang提示dial tcp 172 .217.163.49:443: connectex: A con

    这篇文章主要为大家介绍了golang提示dial tcp 172 .217.163.49:443: connectex: A connection attempt failed解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Golang你一定要懂的连接池实现

    Golang你一定要懂的连接池实现

    这篇文章主要介绍了Golang你一定要懂的连接池实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Go语言动态并发控制sync.WaitGroup的灵活运用示例详解

    Go语言动态并发控制sync.WaitGroup的灵活运用示例详解

    本文将讲解 sync.WaitGroup 的使用方法、原理以及在实际项目中的应用场景,用清晰的代码示例和详细的注释,助力读者掌握并发编程中等待组的使用技巧
    2023-11-11
  • Go语言利用接口实现链表插入功能详解

    Go语言利用接口实现链表插入功能详解

    这篇文章主要为大家介绍了Go语言中的接口,以及如何利用接口实现链表插入功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-04-04
  • golang-redis之sorted set类型操作详解

    golang-redis之sorted set类型操作详解

    这篇文章主要介绍了golang-redis之sorted set类型操作详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Go语言kylin任务自动化实例详解

    Go语言kylin任务自动化实例详解

    这篇文章主要为大家介绍了Go语言kylin任务自动化实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06

最新评论