美文网首页
golang中神奇的sync.Pool

golang中神奇的sync.Pool

作者: 简书网abc | 来源:发表于2021-06-28 23:16 被阅读0次

前言

在 golang 中有一个池,它特别神奇,你只要和它有个约定,你要什么它就给什么,你用完了还可以还回去,但是下次拿的时候呢,确不一定是你上次存的那个,这个池就是 sync.Pool

package main

import (
    "fmt"
    "sync"
)

var strPool = sync.Pool{
    New: func() interface{} {
        return "test str"
    },
}

func main() {
    str := strPool.Get()
    fmt.Println(str)
    strPool.Put(str)
}

  • 通过New去定义你这个池子里面放的究竟是什么东西,在这个池子里面你只能放一种类型的东西。比如在上面的例子中我就在池子里面放了字符串。
  • 我们随时可以通过Get方法从池子里面获取我们之前在New里面定义类型的数据。
  • 当我们用完了之后可以通过Put方法放回去,或者放别的同类型的数据进去。

目的

那么这个池子的目的是什么呢?其实一句话就可以说明白,就是为了复用已经使用过的对象,来达到优化内存使用和回收的目的。说白了,一开始这个池子会初始化一些对象供你使用,如果不够了呢,自己会通过new产生一些,当你放回去了之后这些对象会被别人进行复用,当对象特别大并且使用非常频繁的时候可以大大的减少对象的创建和回收的时间。

  • 临时对象
  • 自动移除
  • 当这个对象的引用只有sync.Pool持有时,这个对象内存会被释放
  • 多线程安全
  • 目的就是缓存并重用对象,减少GC的压力
  • 自动扩容、缩容
  • 不要去拷贝pool,也就是说最好单例

对象池参考

相关文章

  • golang中神奇的sync.Pool

    前言 在 golang 中有一个池,它特别神奇,你只要和它有个约定,你要什么它就给什么,你用完了还可以还回去,但是...

  • golang中神奇的sync.Pool

    前言 在 golang 中有一个池,它特别神奇,你只要和它有个约定,你要什么它就给什么,你用完了还可以还回去,但是...

  • Go每日精选(2019-06-17)

    1.golang fmt递归引起stack overflow异常 2.golang新版如何优化sync.pool锁...

  • Golang sync.Pool 和 伪共享false shar

    参考go语言的官方包sync.Pool的实现原理和适用场景深入Golang之sync.Pool详解伪共享(fals...

  • golang sync.Pool

    临时对象池   当多个goroutine都需要创建同一个对象的时候,如果goroutine过多,可能导致对象的创建...

  • golang sync.pool对象复用 并发原理 缓存池

    golang sync.pool对象复用 并发原理 缓存池 在go http每一次go serve(l)都会构建R...

  • golang sync.Pool 分析

    在 echo 官网的手册上可以看到 echo 框架的路由性能主要依赖于 radix tree 和 sync.poo...

  • golang 中神奇的 slice

    声明:本文仅限于简书发布,其他第三方网站均为盗版,原文地址: golang 中神奇的 slice 在 golang...

  • golang的sync.Pool的使用

    可以看这篇文章https://blog.csdn.net/yongjian_lian/article/detail...

  • 说说golang的对象池sync.Pool

    网上关于sync.Pool的源码分析的文章比较多,本文的重点不在于源码分析,而在于简单易懂的介绍一下sync.Po...

网友评论

      本文标题:golang中神奇的sync.Pool

      本文链接:https://www.haomeiwen.com/subject/bjisyltx.html