GO sync.pool学习笔记

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

  1. 初始化 Pool:首先,你需要创建一个 sync.Pool 实例,一般使用 sync.NewPool 函数来初始化:
import "sync"var myPool = sync.Pool{New: func() interface{} {return make([]byte, 1024) // 初始化对象的方法},
}

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

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

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

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

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

注意事项:

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/745283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python数据分析-4

1.对于一组电影数据,呈现出rating,runtime的分布情况: #encodingutf-8 import pandas as pd import numpy as np from matplotlib import pyplot as plt file_path "./youtube_video_data/IMDB-Movie-Data.csv" df pd.read_csv(file_path) …

浏览器插件开发初体验(URL OPENER)

https://github.com/sxei/chrome-plugin-demo 参考资料 需求: 1、对于一串文本,提取其中的urls并打开这些url。 2、提取浏览器所有tabs的url和title 例如: // https://www.cnblogs.com/kelelipeng/p/17129941.html // https://www.ruanyifen…

AJAX 05 axios拦截器、数据管理平台

AJAX 学习 AJAX 05 黑马头条-数据管理平台项目准备业务1:验证码登录bootstrap提示框实际业务中的验证码登录token 【注】HTML遗落的知识【注】JS遗漏的知识业务2:个人信息设置 & axios拦截器axios请求拦截器axios响应拦截器 业务3:发布文…

9种分布式ID生成之美团(Leaf)实战

​​​​​ 前几天写过一篇《一口气说出 9种 分布式ID生成方式,面试官有点懵了》,里边简单的介绍了九种分布式ID生成方式,但是对于像美团(Leaf)、滴滴(Tinyid)、百度(uid-generator&…

Unity3D MMORPG角色的UI血条管理详解

前言 在Unity3D游戏开发中,MMORPG(Massively Multiplayer Online Role-Playing Game)游戏是一种非常流行的游戏类型。在这种类型的游戏中,玩家通常可以选择不同的角色来进行游戏,而角色的血条管理是游戏中非常重要的一…

Hadoop,Hive 数据预处理CR

记录一次大材小用,我在将.csv电影数据集 电影json数据 导入MySQL时,出现了报错: 很明显,意味着.csv中的数据有非utf8编码的, 尝试使用file查看了下.csv文件的编码格式: 如果不确定原始编码,可以先用file命令尝试检测一下: file -i input.csv该命令会显示文件的MIME类型…

Hive3.0.0安装初始化过程,schematool -dbType mysql -initSchema报错

详细如下: 从字面意思理解,是在hive-site.xml文件3213行出现了非法字符,处理步骤如下 1、使用vi 3213 hive-site.xml打开文件 2、删除“&#8”,保存文件 3、再次执行初始化命令 schematool -dbType mysql -initSchema 4、登…

Xcode15.3 -Library ‘iconv2.4.0‘ not found

今天升级了一下Mac mini 和Xcode15.3,运行项目就报 Library ‘iconv2.4.0’ not found的错误 xcode升级到:15.3(15A240d) 项目在旧版本下,是能通过编译 并且能运行的。 解决方法: 方案1:在Build Phases --> Link…

华为OD技术C卷“测试用例执行计划”Java解答

描述 示例 算法思路1 整体思路是,先读取特性的优先级和测试用例覆盖的特性列表,然后计算每个测试用例的优先级,并将其与测试用例的索引存储到二维数组中。最后按照优先级和索引排序,输出测试用例的索引,即为执行顺序。…

游戏测试 - 面经 - 创梦天地科技

2024.3.6 Boss直聘 2024.3.13 面试 2024.3.14 电话通知约第二轮面试 自我介绍 平时有玩过什么游戏 射击类有玩过吗 实习时是测试岗是吗 自动化的测试化脚本有自己编写过吗 有没有做过其他功能测试的部分 有没有测试用例之类的 测试用例表头有哪些内容 你们在写用例之…

Maven 命令保存log、 2>1 和 maven项目打包及命令

一.maven项目打包及命令 (1).先把命令行切换到Maven项目的根目录, 例如:/data/springcloud/eureka,然后执行命令:mvn clean package [rootlocalhost ~]# cd /data/springcloud/eureka [rootlocalhost eureka]# mvn clean packag…

网络编程套接字(4)——Java套接字(TCP协议)

目录 一、Java流套接字通信模型 二、TCP流套接字编程 1、ServerSocket ServerSocket构造方法: ServerSocket方法: 2、Socket Socket构造方法: Socket方法: 三、代码示例:回显服务器 1、服务器代码 代码解析 2、客户端…

配置阿里云加速器

国内镜像中心常用阿里云或者网易云。在本地docker中指定要使用国内加速器的地址后&#xff0c;就可以直接从阿里云镜像中心下载镜像。 2024阿里云-上云采购季-阿里云 [rootlocalhost /]# mkdir -p /etc/docker [rootlocalhost /]# tee /etc/docker/daemon.json <<-EOF &…

windows 安装 gitlab-runner CICD

点击搜索图标 手动输入PowerShell, 右键点击管理员权限打开&#xff0c; 一、安装 安装 gitlab runner 文档参考地址 1、下载exe执行文件 我这里是 win64 https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-windows-amd64.exe 2、创建 gitla…

论文研读笔记2

1.Han异构图网络看不懂。。。正在看 https://zhuanlan.zhihu.com/p/346658317 https://www.bilibili.com/video/BV1fc411z7mx?p19&vd_source6fb54905ed1c5c332b7a606643d8525c 2. 阅读论文&#xff1a;Learning Long- and Short-Term User Literal-Preference with Mu…

Java日志框架Log4j 2详解

有时希望能够以文件的形式记录执行过程中出现的异常信息&#xff0c;甚至记录程序正常运行的关键步骤&#xff0c;以便日后查看&#xff0c;那么该如何处理呢? 答:显然&#xff0c;可以自行编程实现这个需求&#xff0c;但是&#xff0c;从更注重效率和性能的方面考虑&#x…

PyTorch学习笔记(七)

5. 基本数学运算 5.1 torch.add()函数 torch.add() 是 PyTorch 中的一个函数&#xff0c;用于执行逐元素的加法操作。这个函数可以接受多个张量&#xff08;tensors&#xff09;作为输入&#xff0c;并返回一个新的张量&#xff0c;其中每个元素都是输入张量对应元素之和。 …

freemarker if 判断list 中的元素是否为null

判断item.totalPrice 是否为null, 如果不为null 直接传递值, 为null则置0 <table><tr><th>排名</th><th>商品名</th><th>成交金额</th></tr><#list items as item><tr><td>${item?index 1}</td…

物联网终端telegraf采集设备信息

背景 低功耗设备上资源有限&#xff0c;但又比较重要。对其的管理难度很大&#xff0c;有些时候又必须时刻了解其运行状况。我们自然想到的是能否有办法监控它呢&#xff1f;当时是有的&#xff01;而且很成熟的解决方案。TICK技术栈&#xff0c;那TICK是什么呢&#xff1f; TI…

Hive中的NVL函数与COALESCE函数

1.NVL函数 1.1 函数语法 -- nvl(value,default_value) - Returns default value if value is null else returns value Example:> SELECT nvl(null,bla) FROM src LIMIT 1;bla Function class:org.apache.hadoop.hive.ql.udf.generic.GenericUDFNvl Function type:BUILTIN…