From 93be70877b06aa79cf45dbb7cdd9e604b4b5db21 Mon Sep 17 00:00:00 2001 From: orgin Date: Fri, 4 Mar 2022 10:56:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=A4=A7=E5=86=85=E5=AD=98=E6=B1=A0?= =?UTF-8?q?=E5=88=86=E5=B8=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- network/slicepool.go | 51 ++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/network/slicepool.go b/network/slicepool.go index b7aa2f3..9de5946 100644 --- a/network/slicepool.go +++ b/network/slicepool.go @@ -10,38 +10,37 @@ type INetMempool interface { } type memAreaPool struct { - minAreaValue int //最小范围值 - maxAreaValue int //最大范围值 - growthValue int //内存增长值 - pool []sync.Pool + minAreaValue int //最小范围值 + maxAreaValue int //最大范围值 + growthValue int //内存增长值 + pool []sync.Pool } -//小于2048时,按64步长增长.>2048时则按2048长度增长 -var memAreaPoolList = [2]*memAreaPool{&memAreaPool{minAreaValue:1,maxAreaValue: 2048,growthValue:64}, &memAreaPool{minAreaValue: 2049,maxAreaValue:65536,growthValue:2048}} +var memAreaPoolList = [3]*memAreaPool{&memAreaPool{minAreaValue: 1, maxAreaValue: 4096, growthValue: 512}, &memAreaPool{minAreaValue: 4097, maxAreaValue: 40960, growthValue: 4096}, &memAreaPool{minAreaValue: 40961, maxAreaValue: 417792, growthValue: 16384}} -func init(){ - for i:=0;i len(areaPool.pool) || pos == -1 { return nil @@ -50,8 +49,8 @@ func (areaPool *memAreaPool) makeByteSlice(size int) []byte{ return areaPool.pool[pos].Get().([]byte)[:size] } -func (areaPool *memAreaPool) getPosByteSize(size int) int{ - pos := (size - areaPool.minAreaValue)/areaPool.growthValue +func (areaPool *memAreaPool) getPosByteSize(size int) int { + pos := (size - areaPool.minAreaValue) / areaPool.growthValue if pos >= len(areaPool.pool) { return -1 } @@ -59,29 +58,29 @@ func (areaPool *memAreaPool) getPosByteSize(size int) int{ return pos } -func (areaPool *memAreaPool) releaseByteSlice(byteBuff []byte) bool{ +func (areaPool *memAreaPool) releaseByteSlice(byteBuff []byte) bool { pos := areaPool.getPosByteSize(cap(byteBuff)) - if pos > len(areaPool.pool) || pos == -1{ + if pos > len(areaPool.pool) || pos == -1 { panic("assert!") return false } - + areaPool.pool[pos].Put(byteBuff) return true } -func (areaPool *memAreaPool) MakeByteSlice(size int) []byte{ - for i:=0;i