GO sync.pool学习笔记

sync.Pool 是 Go 语言标准库中提供的一个对象池,用于管理临时对象的分配和重用,以减少内存分配的开销。下面是 sync.Pool 的基本使用方法:

  1. 初始化 Pool :首先,你需要创建一个 sync.Pool 实例,一般使用 sync.NewPool 函数来初始化:
go 复制代码
import "sync"

var myPool = sync.Pool{
    New: func() interface{} {
        return make([]byte, 1024) // 初始化对象的方法
    },
}

在上面的示例中,我们创建了一个 sync.Pool 实例 myPool,并指定了一个匿名函数作为 New 字段的值,该函数用于生成新的对象。

  1. 从 Pool 中获取对象 :通过调用 myPool.Get() 方法可以从对象池中获取对象。如果池中有可用对象,则会返回一个对象,否则会调用 New 函数生成一个新对象。
go 复制代码
obj := myPool.Get().([]byte)

在这里,我们将获取的对象断言为 []byte 类型。注意,需要通过断言将 interface{} 类型的返回值转换为期望的类型。

  1. 使用对象:得到对象后,你可以像使用普通的对象一样使用它。
go 复制代码
// 使用 obj 进行操作
  1. 归还对象 :在使用完对象后,你需要将对象归还到对象池中,以便后续复用。通过调用 myPool.Put(obj) 方法实现。
go 复制代码
myPool.Put(obj)

这样,对象就被归还到了对象池中,供下一次使用。

注意事项:

  • 对象池中的对象没有固定的数量限制,它会根据需要自动增长。但是,一旦对象被放入池中,它就不会被垃圾回收器回收,直到程序结束或者手动清空对象池。
  • 对象池适用于需要频繁创建和销毁的临时对象,但不适用于长期占用资源的对象。

总的来说,sync.Pool 提供了一种简单而有效的方式来管理临时对象,减少了频繁创建和销毁对象所带来的性能开销。

相关推荐
无心水2 小时前
24、系统架构师论文写作专题 核心考点与学习笔记
笔记·学习·系统架构·架构师·安全架构·软考架构师·软考系统架构设计师
蒸蒸yyyyzwd2 小时前
邓明 Agent 系统面试-意图识别学习笔记
笔记·学习
Zhao-Jichao6 小时前
AI Prompting for Everyone 课程笔记 - P21 总结 Conclusion
人工智能·笔记
欢欢李6 小时前
【LTE L3 笔记 05】LTE同步信号
笔记·无线通信·物理层·lte·空口协议
La Pulga7 小时前
【FreeRTOS源码学习笔记】空闲任务与阻塞延时
笔记·mcu·学习·嵌入式·freertos·实时操作系统
蒸蒸yyyyzwd8 小时前
秋招学习笔记 day106
笔记·学习
小李不想当小白9 小时前
WDG看门狗(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
欢欢李9 小时前
【LTE L3 笔记 04】LTE帧结构
笔记·无线通信·物理层·lte·空口协议
Zhao-Jichao11 小时前
AI Prompting for Everyone 课程笔记 - P20 实验与期末项目 Lab and Final Project
前端·人工智能·笔记
lisw0512 小时前
作为人类代理的大语言模型及其角色分类!
人工智能·学习·语言模型