feat: concurrent 包 新增 NewMapPool 函数,支持创建 map 对象池
This commit is contained in:
parent
d3e563257f
commit
74a6b545c2
|
@ -7,6 +7,9 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// NewPool 创建一个线程安全的对象缓冲池
|
||||||
|
// - 通过 Get 获取一个对象,如果缓冲区内存在可用对象则直接返回,否则新建一个进行返回
|
||||||
|
// - 通过 Release 将使用完成的对象放回缓冲区,超出缓冲区大小的对象将被放弃
|
||||||
func NewPool[T any](bufferSize int, generator func() T, releaser func(data T)) *Pool[T] {
|
func NewPool[T any](bufferSize int, generator func() T, releaser func(data T)) *Pool[T] {
|
||||||
pool := &Pool[T]{
|
pool := &Pool[T]{
|
||||||
bufferSize: bufferSize,
|
bufferSize: bufferSize,
|
||||||
|
@ -19,6 +22,19 @@ func NewPool[T any](bufferSize int, generator func() T, releaser func(data T)) *
|
||||||
return pool
|
return pool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMapPool 创建一个线程安全的 map 缓冲池
|
||||||
|
// - 通过 Get 获取一个 map,如果缓冲区内存在可用 map 则直接返回,否则新建一个进行返回
|
||||||
|
// - 通过 Release 将使用完成的 map 放回缓冲区,超出缓冲区大小的 map 将被放弃
|
||||||
|
func NewMapPool[K comparable, V any](bufferSize int) *Pool[map[K]V] {
|
||||||
|
return NewPool[map[K]V](bufferSize, func() map[K]V {
|
||||||
|
return make(map[K]V)
|
||||||
|
}, func(data map[K]V) {
|
||||||
|
for k := range data {
|
||||||
|
delete(data, k)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Pool 线程安全的对象缓冲池
|
// Pool 线程安全的对象缓冲池
|
||||||
// - 一些高频临时生成使用的对象可以通过 Pool 进行管理,例如属性计算等
|
// - 一些高频临时生成使用的对象可以通过 Pool 进行管理,例如属性计算等
|
||||||
// - 缓冲区内存在可用对象时直接返回,否则新建一个进行返回
|
// - 缓冲区内存在可用对象时直接返回,否则新建一个进行返回
|
||||||
|
|
Loading…
Reference in New Issue