需要最小化内存分配的解决方案

时间:2017-10-13 03:51:20

标签: go garbage-collection circular-buffer

我有以下代码,下面的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
}

0 个答案:

没有答案