Darien Raymond преди 7 години
родител
ревизия
ff0b0b1640
променени са 2 файла, в които са добавени 16 реда и са изтрити 4 реда
  1. 3 1
      common/buf/buffer.go
  2. 13 3
      common/bytespool/pool.go

+ 3 - 1
common/buf/buffer.go

@@ -172,9 +172,11 @@ func (b *Buffer) String() string {
 	return string(b.Bytes())
 }
 
+var pool = bytespool.GetPool(Size)
+
 // New creates a Buffer with 0 length and 2K capacity.
 func New() *Buffer {
 	return &Buffer{
-		v: bytespool.Alloc(Size),
+		v: pool.Get().([]byte),
 	}
 }

+ 13 - 3
common/bytespool/pool.go

@@ -33,13 +33,23 @@ func init() {
 	}
 }
 
-// Alloc returns a byte slice with at least the given size. Minimum size of returned slice is 2048.
-func Alloc(size int32) []byte {
+// GetPool returns a sync.Pool that generates bytes array with at least the given size.
+// It may return nil if no such pool exists.
+func GetPool(size int32) *sync.Pool {
 	for idx, ps := range poolSize {
 		if size <= ps {
-			return pool[idx].Get().([]byte)
+			return &pool[idx]
 		}
 	}
+	return nil
+}
+
+// Alloc returns a byte slice with at least the given size. Minimum size of returned slice is 2048.
+func Alloc(size int32) []byte {
+	pool := GetPool(size)
+	if pool != nil {
+		return pool.Get().([]byte)
+	}
 	return make([]byte, size)
 }