From 49914adf00e90ad8ff20a57f6b9dd88566f2b784 Mon Sep 17 00:00:00 2001 From: Darien Raymond Date: Sun, 22 Oct 2017 15:01:36 +0200 Subject: [PATCH] remove buffer pool in favor of Go 1.9 concurrent GC --- common/buf/buffer_pool.go | 73 +-------------------------------------- 1 file changed, 1 insertion(+), 72 deletions(-) diff --git a/common/buf/buffer_pool.go b/common/buf/buffer_pool.go index be94ad46..d6604730 100644 --- a/common/buf/buffer_pool.go +++ b/common/buf/buffer_pool.go @@ -1,10 +1,7 @@ package buf import ( - "runtime" "sync" - - "v2ray.com/core/common/platform" ) // Pool provides functionality to generate and recycle buffers on demand. @@ -45,79 +42,11 @@ func (p *SyncPool) Free(buffer *Buffer) { } } -// BufferPool is a Pool that utilizes an internal cache. -type BufferPool struct { - chain chan []byte - sub Pool -} - -// NewBufferPool creates a new BufferPool with given buffer size, and internal cache size. -func NewBufferPool(bufferSize, poolSize uint32) *BufferPool { - pool := &BufferPool{ - chain: make(chan []byte, poolSize), - sub: NewSyncPool(bufferSize), - } - for i := uint32(0); i < poolSize; i++ { - pool.chain <- make([]byte, bufferSize) - } - return pool -} - -// Allocate implements Pool.Allocate(). -func (p *BufferPool) Allocate() *Buffer { - select { - case b := <-p.chain: - return &Buffer{ - v: b, - pool: p, - } - default: - return p.sub.Allocate() - } -} - -// Free implements Pool.Free(). -func (p *BufferPool) Free(buffer *Buffer) { - if buffer.v == nil { - return - } - select { - case p.chain <- buffer.v: - default: - p.sub.Free(buffer) - } -} - const ( // Size of a regular buffer. Size = 2 * 1024 - - poolSizeEnvKey = "v2ray.buffer.size" ) var ( - mediumPool Pool + mediumPool Pool = NewSyncPool(Size) ) - -func getDefaultPoolSize() int { - switch runtime.GOARCH { - case "amd64", "386": - return 20 - default: - return 5 - } -} - -func init() { - f := platform.EnvFlag{ - Name: poolSizeEnvKey, - AltName: platform.NormalizeEnvName(poolSizeEnvKey), - } - size := f.GetValueAsInt(getDefaultPoolSize()) - if size > 0 { - totalByteSize := uint32(size) * 1024 * 1024 - mediumPool = NewBufferPool(Size, totalByteSize/Size) - } else { - mediumPool = NewSyncPool(Size) - } -}