
对于高并发场景, 频繁创建大对象, 使用sync.Pool优化, 应该有一点帮助吧
const magicNumber = 1 << 62 type Closer[T any] interface { Close() } type Object[T Closer[T]] struct { state int64 value T } func NewObject[T Closer[T]](v T) *Object[T] { return &Object[T]{value: v, state: magicNumber} } func (c *Object[T]) Value() T { return c.value } func (c *Object[T]) Add() { atomic.AddInt64(&c.state, 1) } func (c *Object[T]) Done() { if atomic.AddInt64(&c.state, -1) == 0 { c.value.Close() } } func (c *Object[T]) Release() { if atomic.AddInt64(&c.state, -1*magicNumber) == 0 { c.value.Close() } } 1 Juppiter 2023 年 7 月 19 日 看标题以为是给时间管理大师用的... |
3 zhlxsh 2023 年 7 月 19 日 via iPhone 这不是我以为的对象。 叫 go 高并发对象管理多好,不容易误解 |
5 xuanbg 2023 年 7 月 19 日 不如直接创建一个有 N 个对象的对象池,N=最大并发数。这样的话,没有对象的线程就等着别的线程释放对象。。。 哎呀,这话看上去怎么那么怪呢? |
6 hsfzxjy 2023 年 7 月 19 日 via Android Closer 的范型参数没用到啊 |
9 shaoyie 2023 年 7 月 26 日 可以参考一个这个 https://github.com/shaovie/ttlcache 有生命周期管理的对象缓存 |
11 jiayiming001 2023 年 9 月 14 日 @Nazz 你好,能举个使用场景吗? 我目前没想到非常合适的场景。 |
12 Nazz OP @jiayiming001 跨协程内存复用 |