首页 > 其他分享 >golang中sync.Pool的使用示例

golang中sync.Pool的使用示例

时间:2023-04-23 23:34:19浏览次数:29  
标签:Get fmt 示例 sync golang person Pool pool

先上代码:

package main

import (
	"fmt"
	"sync"
)

var pool sync.Pool

type person struct {
	Name string
	Age  int
}

func init() {
	pool = sync.Pool{New: func() any {
		return new(person)
	}}
}

func main() {
	p := pool.Get().(*person)
	p.Name = "dav"
	p.Age = 89

	fmt.Println("person:", *p)

	pool.Put(p)

	p2 := pool.Get().(*person)
	fmt.Println("person2:", *p2)
	p3 := pool.Get().(*person)
	fmt.Println("person3:", *p3)
}

测试结果:

person: {dav 89}
person2: {dav 89}
person3: { 0}    

可以看到,我们通过操作 poolgetput 函数就可以实现 pool 池的 person 复用。简单点说:

  • 1.通过 New 自定义函数,我们可以定义从 pool 中取出的对象
  • 2.通过 Get 取出 pool 中的对象,如果没有定义 New,则返回 nil,否则返回定义的对象
  • 3.通过 Put 放回对象到池中,如果非 nil,下次 Get 可以实现复用

通过以上操作,就可以实现对象复用,进而减轻内存分配压力,也减少GC带来的影响。

标签:Get,fmt,示例,sync,golang,person,Pool,pool
From: https://www.cnblogs.com/davis12/p/17348118.html

相关文章

  • Golang实现TCP端口扫描器
    简易版packagemainfuncworker(ports,resultschanint){forp:=rangeports{address:=fmt.Sprintf("bilibili.com:%d",p)conn,err:=net.Dial("tcp",address)iferr!=nil{result<-0conti......
  • Google Guava常用的代码示例
    GoogleGuava谷歌出品的,非常实用。包含集合、并发、I/O、散列、缓存、字符串等。依赖:<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>18.0</version></dependency>JoinerJoiner可以连接字符串。常用方法:Joine......
  • MKL稀疏矩阵运算示例及函数封装
    IntelMKL库提供了大量优化程度高、效率快的稀疏矩阵算法,使用MKL库的将大型矩阵进行稀疏表示后,利用稀疏矩阵运算可大量节省计算时间和空间,但由于MKL中的原生API接口繁杂,因此将常用函数封装,便于后续使用,最后在实际例子中调用接口执行想要的矩阵运算。0稀疏矩阵稀疏矩阵是指矩阵......
  • thinkphp在模型中自动完成session赋值示例代码
    相信用过thinkphp的用户都知道thinkphp的模型可以完成很多辅助功能,比如自动验证、自动完成等,今天在开发中遇到自动完成中需要获取session值然后自动赋值的功能,具体看代码;classArticlelModelextendsModel{protected$_auto=array(array('addtime','time',1,'function'......
  • MKL普通矩阵运算示例及函数封装
    本示例将介绍MKL中的矩阵乘法和求逆,使用MKL进行此类大型矩阵运算可大量节省计算时间和空间,但由于MKL中的原生API接口繁杂,因此将常用函数封装,便于后续使用,最后在实际例子中调用接口执行想要的矩阵运算。1MKL矩阵乘法案例所用示例如下,矩阵A、B分别为\[A={\left[{\begin{array......
  • Linux作为rsync的服务端,Windows作为rsync的客户端
    服务端:centos7     172.16.106.199客户端:Windows10  172.16.106.143 服务端配置:创建服务器要同步数据的目录/tmp/rsyncmkdir/tmp/rsync设置权限为700chmod700 /tmp/rsync/ 编辑配置文件/etc/rsyncd.conf (修改该文件 除了修改监听端口跟ip需要重启,修......
  • GoLang 版本号大小对比
    go版本号大小对比,比如:1.0.0 <1.0.1   思路:按照 .(点符号)分割,分割后将其转成整型,然后再就行对比。//版本号对比使用【版本号=第一位*10000+第二位*100+第三位】//一般版本号是3位,如果大于三位就需要在此进行扩展funcFormatAppVersion(versionNostring)int{......
  • Golang实现代理TCP客户端
    目标网站xxx.com,代理服务器xxxproxy.com,通过代理服务器实现流量转发。packagemainfunchandle(srcnet.Conn){dst,err:=net.Dial("tcp","xxx.com:80")iferr!=nil{log.Fatalln("Unabletoconnectoutunreachablehost")}deferd......
  • python matplotlib 散点图的拟合直线的简单示例
     #samplepointsX=[0,5,10,15,20]Y=[0,7,10,13,20]#solveforaandbdefbest_fit(X,Y):xbar=sum(X)/len(X)ybar=sum(Y)/len(Y)n=len(X)#orlen(Y)numer=sum([xi*yiforxi,yiinzip(X,Y)])-n*xbar*y......
  • GoodSync(最好的文件同步软件)
    GoodSync是一款使用创新的最好的文件同步软件,可以在你的台式机、笔记本、USB外置驱动器等设备直接进行数据文件同步软件。GoodSync将高度稳定的可靠性和极其简单的易用性完美结合起来,可以实现两台电脑、电脑与云端网盘、电脑和远程FTP服务器、电脑与U盘之间的数据和文件......