第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > sync.Pool 使用

sync.Pool 使用

时间:2019-05-14 08:07:26

相关推荐

sync.Pool 使用

sync.Pool 使用场景

保存和复用临时对象,减少内存分配,降低 GC 压力

例子

type Student struct {Name stringAge int32Remark [1024]byte}var buf, _ = json.Marshal(Student{Name: "Geektutu", Age: 25})func unmarsh() {stu := &Student{}json.Unmarshal(buf, stu)}

json 反序列化在文本解析和网络通信过程中十分常见,当程序并发很高时,短时间内需要创建大量的临时变量,,这些对象分配在堆上,会给 GC 造成很大压力,严重影响程序性能。

sync.Pool 是可伸缩的,同时也是并发安全的,大小受限于内存大小。sync.Pool 用于存储那些被分配了但是没有被使用,但是未来可能被使用的值。 这样可以不用再次分配内存,提高效率。

sync.Pool 是大小可伸缩的,高负载时会动态扩容,存放在池中对象不活跃会被自动清理。

如何使用

声明对象池

只要实现 New 函数即可,对象池中没有对象,那么会调用 New 函数创建

var studentPool = sync.Pool{New: func() interface{} { return new(Student) },}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。