mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-26 20:30:10 +01:00
4146fc4668
This can reduce memory usage on systems with enabled CPU limits. Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/946
38 lines
703 B
Go
38 lines
703 B
Go
package common
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/cgroup"
|
|
)
|
|
|
|
// GetInsertCtx returns InsertCtx from the pool.
|
|
//
|
|
// Call PutInsertCtx for returning it to the pool.
|
|
func GetInsertCtx() *InsertCtx {
|
|
select {
|
|
case ctx := <-insertCtxPoolCh:
|
|
return ctx
|
|
default:
|
|
if v := insertCtxPool.Get(); v != nil {
|
|
return v.(*InsertCtx)
|
|
}
|
|
return &InsertCtx{}
|
|
}
|
|
}
|
|
|
|
// PutInsertCtx returns ctx to the pool.
|
|
//
|
|
// ctx cannot be used after the call.
|
|
func PutInsertCtx(ctx *InsertCtx) {
|
|
ctx.Reset(0)
|
|
select {
|
|
case insertCtxPoolCh <- ctx:
|
|
default:
|
|
insertCtxPool.Put(ctx)
|
|
}
|
|
}
|
|
|
|
var insertCtxPool sync.Pool
|
|
var insertCtxPoolCh = make(chan *InsertCtx, cgroup.AvailableCPUs())
|