当前位置: 首页 > 编程笔记 >

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

景成和
2023-03-14
本文向大家介绍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

 类似资料:
  • 主要内容:使用普通函数创建 goroutine,使用匿名函数创建goroutine在编写 Socket 网络程序时,需要提前准备一个线程池为每一个 Socket 的收发包分配一个线程。开发人员需要在线程数量和 CPU 数量间建立一个对应关系,以保证每个任务能及时地被分配到 CPU 上进行处理,同时避免多个任务频繁地在线程间切换执行而损失效率。 虽然,线程池为逻辑编写者提供了线程分配的抽象机制。但是,如果面对随时随地可能发生的并发和线程处理需求,线程池就不是非常直观和方便了。能否

  • 问题内容: 在Go编程语言中,线程安全吗?AFAIK,其文档未提及线程安全性。 问题答案: 没有。 Go文档遵循一个简单的规则:如果未明确声明并发访问某事是安全的,则不是。

  • 我正在实现一个基于java的指数量表,它将有一个初始值(比如1.0),并在时间上呈指数衰减到0。另一个功能将不时增加仪表值。现在我需要一些帮助来开发线程安全的。 我正在考虑使用java计时器或执行器来创建衰减功能,该功能将每隔5毫秒降低仪表的值。同时,另一个函数在被调用时会增加值。 现在我假设它会有并发问题,所以需要帮助来正确实现它。 我的问题是: > 如何设计一个类,该类将执行函数以每5毫秒减少

  • 本文向大家介绍go语言实现sqrt的方法,包括了go语言实现sqrt的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了go语言实现sqrt的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Go语言程序设计有所帮助。

  • 本文向大家介绍利用Go语言实现简单Ping过程的方法,包括了利用Go语言实现简单Ping过程的方法的使用技巧和注意事项,需要的朋友参考一下 一、准备工作 安装最新的Go 1、由于Google被墙的原因,如果没有VPN的话,就到这里下载:http://www.golangtc.com/download 2、使用任意文本编辑器,或者LiteIDE会比较方便编译和调试 二、编码 要用到的package:

  • 本文向大家介绍使用Go语言实现微信公众平台,包括了使用Go语言实现微信公众平台的使用技巧和注意事项,需要的朋友参考一下 这个不是全部的代码哦,只是一个演示可以验证跟接受post传过来的消息并且能返回消息,中间的回复逻辑就待需要各位同志们自己写了哈