当前位置: 首页 > article >正文

Golang中sync.Pool详解及使用方法

什么是sync.Pool?

sync.Pool是用来保存可以被重复使用的临时对象,以便在以后的同类操作中可以重复使用,从而避免了反复创建和销毁临时对象带来的消耗以及对GC造成的压力。常用池化技术来提高程序的性能,例如连接池、线程池等。sync.Pool是并发安全的,可以在多个goroutine中并发调用sync.Pool存取对象。

在Golang的很多标准库和很多知名的开源库中,都可以看到大量使用sync.Pool的场景。例如encoding/json包中的Valid方法使用sync.Pool创建scanner对象,Gin框架使用sync.Pool来复用每个请求都会创建的gin.Context对象。

但需要注意的是,sync.Pool保存的对象随时可能在不发出通知的情况下被清除,因此不能使用sync.Pool存储需要持久化的对象。

sync.Pool使用方法

首先看一段示例代码:

package main

import "sync"

type scanner struct {
	Name string
}

func main() {
	pool := sync.Pool{
		New: func() interface{} {
			return &scanner{
				Name: "json",
			}
		},
	}

	scan := pool.Get().(*scanner)
	println(scan.Name)
	pool.Put(scan)
}

初始化sync.Pool的时候,需要提供一个对象的构造函数New。使用Get从对象池中获取对象,使用Put将对象放回到对象池。

可以看出sync.Pool的使用方法非常简单,对外只提供三个方法:New、Get和Put

  • New方法,使用Get方法从对象池中获取对象的时候,对象池中如果没有,会调用New方法创建一个新的对象。
  • Get方法,从对象池中获取一个对象。
  • Put方法,将对象放回到对象池,下次Get的时候可以复用。

小结

本文介绍了sync.Pool的作用和使用方法,下篇文章深入源码解析sync.Pool。


http://www.kler.cn/a/17438.html

相关文章:

  • Ubuntu配置阿里云docker apt源
  • SHELL脚本(Linux)
  • 【云计算解决方案面试整理】1-2云计算基础概念及云计算技术原理
  • 数据库SQL——连接表达式(JOIN)图解
  • 深入理解BERT模型配置:BertConfig类详解
  • 华为机试HJ39 判断两个IP是否属于同一子网
  • ( “ 图 “ 之 拓扑排序 ) 210. 课程表 II ——【Leetcode每日一题】
  • 服务器中了勒索病毒,malox勒索病毒的加密方式及如何应对勒索病毒攻击
  • 【刷题笔记】二维数组地址计算+算法分析+进制转换
  • 计算机网络基础知识(二)—— 什么是Ip地址、Mac地址、网关、子网掩码、DNS
  • SpringBoot实现导出Excel功能
  • 汽车出租系统【纯控制台】(Java课设)
  • 互联网摸鱼日报(2023-05-02)
  • 计算机必读基础书籍
  • 【圈友app】为什么要使用MongoDB数据库?什么样的数据适合存储到MongoDB数据库?
  • 【C++学习】类和对象--多态
  • 牛客网HJ31 单词倒排
  • 第七章 使用ssh服务管理远程主机
  • 中盐集团:加快推进数智化转型,引领盐行业高质量发展
  • leetcode刷题之有关树的算法
  • Codeforces Round 863 (Div 3)总结
  • cmake编译
  • 截图的背景色如何去除?这里介绍一个小工具
  • buildroot系统调试苹果手机网络共享功能
  • 人机智能中几个困难问题浅析
  • API接口的对接流程和注意事项