瀏覽代碼

align large size

Darien Raymond 7 年之前
父節點
當前提交
b3ecb9f766
共有 3 個文件被更改,包括 10 次插入6 次删除
  1. 8 2
      common/buf/buffer_pool.go
  2. 1 3
      common/buf/reader.go
  3. 1 1
      common/buf/reader_test.go

+ 8 - 2
common/buf/buffer_pool.go

@@ -15,14 +15,19 @@ func createAllocFunc(size uint32) func() interface{} {
 	}
 }
 
+// The following parameters controls the size of buffer pools.
+// There are numPools pools. Starting from 2k size, the size of each pool is sizeMulti of the previous one.
+// Package buf is guaranteed to not use buffers larger than the largest pool.
+// Other packets may use larger buffers.
 const (
 	numPools  = 5
 	sizeMulti = 4
 )
 
 var (
-	pool     [numPools]sync.Pool
-	poolSize [numPools]uint32
+	pool      [numPools]sync.Pool
+	poolSize  [numPools]uint32
+	largeSize uint32
 )
 
 func init() {
@@ -32,6 +37,7 @@ func init() {
 			New: createAllocFunc(size),
 		}
 		poolSize[i] = size
+		largeSize = size
 		size *= sizeMulti
 	}
 }

+ 1 - 3
common/buf/reader.go

@@ -19,8 +19,6 @@ func NewBytesToBufferReader(reader io.Reader) Reader {
 	}
 }
 
-const xlSize = 128 * 1024
-
 func (r *BytesToBufferReader) readSmall() (MultiBuffer, error) {
 	b := New()
 	for i := 0; i < 64; i++ {
@@ -55,7 +53,7 @@ func (r *BytesToBufferReader) ReadMultiBuffer() (MultiBuffer, error) {
 	if nBytes > 0 {
 		mb := NewMultiBufferCap(nBytes/Size + 1)
 		mb.Write(r.buffer[:nBytes])
-		if nBytes == len(r.buffer) && nBytes < xlSize {
+		if nBytes == len(r.buffer) && nBytes < int(largeSize) {
 			freeBytes(r.buffer)
 			r.buffer = newBytes(uint32(nBytes) + 1)
 		} else if nBytes < Size {

+ 1 - 1
common/buf/reader_test.go

@@ -33,7 +33,7 @@ func TestAdaptiveReader(t *testing.T) {
 
 	b, err = reader.ReadMultiBuffer()
 	assert(err, IsNil)
-	assert(b.Len(), Equals, 128*1024)
+	assert(b.Len(), Equals, 512*1024)
 }
 
 func TestBytesReaderWriteTo(t *testing.T) {