我有以下代码,下面的flush func每次调用使用1个分配,它复制所有数据并返回。是否有其他更高性能的解决方案可以减少垃圾收集并减少CPU周期?
我们可以在这里使用sync.Pool吗?如果是这样呢?事件切片最多可达10k个元素。
type collector struct {
sync.Mutex
count int
events []*event
}
type event struct {
name string
}
func New() *collector {
return &collector{
count: 0,
event: make([]*event,10000),
}
func (c *collector) add(e *event) {
c.Lock()
defer c.Unlock()
c.events[c.count + 1] = e
c.count++
}
func (c *collector) flush() []*event{
c.Lock()
defer c.Unlock()
result := make([]*event, c.count)
copy(result, c.events)
c.count = 0
return result
}