buffer_pool.go 834 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package statsd
  2. type bufferPool struct {
  3. pool chan *statsdBuffer
  4. bufferMaxSize int
  5. bufferMaxElements int
  6. }
  7. func newBufferPool(poolSize, bufferMaxSize, bufferMaxElements int) *bufferPool {
  8. p := &bufferPool{
  9. pool: make(chan *statsdBuffer, poolSize),
  10. bufferMaxSize: bufferMaxSize,
  11. bufferMaxElements: bufferMaxElements,
  12. }
  13. for i := 0; i < poolSize; i++ {
  14. p.addNewBuffer()
  15. }
  16. return p
  17. }
  18. func (p *bufferPool) addNewBuffer() {
  19. p.pool <- newStatsdBuffer(p.bufferMaxSize, p.bufferMaxElements)
  20. }
  21. func (p *bufferPool) borrowBuffer() *statsdBuffer {
  22. select {
  23. case b := <-p.pool:
  24. return b
  25. default:
  26. return newStatsdBuffer(p.bufferMaxSize, p.bufferMaxElements)
  27. }
  28. }
  29. func (p *bufferPool) returnBuffer(buffer *statsdBuffer) {
  30. buffer.reset()
  31. select {
  32. case p.pool <- buffer:
  33. default:
  34. }
  35. }