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

这篇具有很好参考价值的文章主要介绍了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。文章来源地址https://www.toymoban.com/news/detail-431679.html

到了这里,关于Golang中sync.Pool详解及使用方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go语言中sync.Map、sync.Pool和Context的用法

    目录 【sync.Map】 实现线程安全的 map 类型  使用 sync.Map 实现并发读写的map 【sync.Pool】 使用 带缓冲channel 实现对象池 使用 sync.Pool 创建临时对象池 【Context 上下文】 Context应用:实现带超时功能的远程调用 Context应用:监控指令  Context应用:取消关联任务 之前在 Go语言中ar

    2024年02月05日
    浏览(43)
  • golang实现rpc方法二:使用jsonrpc库【跨平台】

    首先在golang实现rpc方法一net/rpc库中实现了RPC方法,但是那个方法不是跨平台的,没法在其他语言中调用这个实现的RPC方法,接下来我们可以通过jsonroc库实现跨语言的RPC方法。俩种实现方式的代码其实也是差不多的,大差不差,只是调用的库不同。 serverrpc.go实现代码如下 cl

    2024年01月17日
    浏览(53)
  • golang实现rpc方法一:使用net/rpc库【不能跨平台】

    使用golang官方的net/rpc库实现RPC方法,使用http作为RPC的载体,通过http/net包监听客户端连接请求。 rpc服务端实现代码serverrpc.go如下 上述服务端程序运行之后,将会监听本地的8090端口,我们可以实现一个客户端程序,连接服务端并且实现RPC方法调用。 rpc客户端实现代码clientr

    2024年01月17日
    浏览(55)
  • 【Linux】什么是.bashrc,以及其使用方法

    经常在配置linux各种环境的时候,遇到对bashrc的配置。当时也只是机械地跟着教程,一步步输入指令;遇到的次数多了,想知道.bashrc究竟是何方神圣。于是整理了下其主要功能以及使用方法。 .bashrc,属于一种系统隐藏文件,常常可见于 macOS 或者主流的 Linux 发行版。如果你

    2024年03月14日
    浏览(40)
  • 什么是组件,以及前端各种框架组件的使用方法

    🙂博主:小猫娃来啦 🙂文章核心: 介绍什么是组件,以及前端各种框架组件的使用方法 ⭐组件就像是搭积木一样的东西,可以用来构建软件或者系统。每个组件都有自己独立的功能和任务,就像一个小小的部件。你可以把这些小部件组合在一起,形成一个完整的应用程序

    2024年02月12日
    浏览(47)
  • Optional 使用方法详解

    Optional的作用是什么?他都有哪些方法?阿里规范点名说尽量用Optional来避免空指针,那么什么场景用Optional?本篇文章围绕这三点来进行讲解。 到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,Google公司著名的Guava项目引

    2024年02月02日
    浏览(37)
  • scanf函数使用方法详解

    1.首先我们需要知道, scanf函数是一种格式化输入函数(按照格式字符串的格式,从键盘上把数据输入到指定的变量之中) C语言中格式字符串 的一般形式为: %[标志][输出最小宽度][.精度][长度]类型 , 其中方括号[]中的项为可选项。 平时我们使用的最多的就是% + 类型。 s

    2024年02月13日
    浏览(34)
  • foreach循环使用方法详解

    在前面的文章中, 千锋壹哥 给大家讲解了for、while、do-while三种循环结构,并讲解了如何跳出循环的几种方式,比如break、continue、return等。但是截止到目前,与循环相关的内容还没有完事,我们还有最后一哆嗦,今天 千锋壹哥 会给大家讲解另一种循环方式--增强for循环!这

    2023年04月24日
    浏览(43)
  • iperf3使用方法详解

    iperf3是一款带宽测试工具,它支持调节各种参数,比如通信协议,数据包个数,发送持续时间,测试完会报告网络带宽,丢包率和其他参数。 小广告:欢迎喜欢网络技术的朋友加我微信:xfiles_sky,一起学习。 一、安装 操作系统:Ubuntu20.04LTS 打开终端,直接输入 二、使用方

    2024年02月14日
    浏览(36)
  • GROUP BY 使用方法详解

    group by是开发中经常用到的SQL语句,从字面意思来看就是根据哪个字段或者哪几个字段对查询到的数据进行分组统计,既然是分组统计那如何分组呢?所以group by通常都是和聚合函数还有having一起使用。 select 聚合函数(字段1),字段2 from 表名 where 条件 group by 字段2,字段3 或者

    2024年02月13日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包