golang 编程笔记

【golang】语言sync.Pool优化性能资源重复利用

2020-03-14  本文已影响0人  dongzd

使用原因

基本实现

import (
    "fmt"
    "sync"
)
type Con Struct{
    User string
}
func main() {
    p := &sync.Pool{
        New: func() interface{} {
            return new(Con)
        },
    }

    s := p.Get().(Con)
    fmt.Println(s)
    s.User = "test"
    p.Put(s)
}

当使用的对象时候,如果没有则会在New里面创建一个,使用完在放入,取出对象里面具体类容,根据不同业务逻辑,设置不同值,当放入pool被另一个程序复用后,会重新设置自己需要的值,都是在重复利用已经给Con分配的内存(new分配内存)

单独封装成文件

var (
    defaultTaskPool = newTaskPool()
)
func newTaskPool() *taskPool {
    return &taskPool{
        New: func() interface{} {
            return &Task{}
        },
    }
}

func (pool *taskPool) get() *Task {
    return pool.Get().(*Task)
}

func (pool *taskPool) put(obj *Task) {
        obj.Reset()
    pool.Put(obj)
}
上一篇下一篇

猜你喜欢

热点阅读