Skip to content

Commit d07263d

Browse files
authored
fix: 修复BufferPool性能测试遗漏buffer.Reset问题 (#18)
* fix: 修复BufferPool性能测试遗漏buffer.Reset问题 #17 * 更换为使用固定BufferPool
1 parent 54c5b8f commit d07263d

File tree

3 files changed

+7
-1
lines changed

3 files changed

+7
-1
lines changed

exstrings/join_int.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/thinkeridea/go-extend/pool"
1010
)
1111

12-
var buffPool = pool.NewBuffer(64)
12+
var buffPool = pool.GetBuff64()
1313

1414
// JoinInts 使用 sep 连接 []int 并返回连接的字符串
1515
func JoinInts(v []int, sep string) string {

pool/benchmark/buffer_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ func BenchmarkBufferSyncPool(b *testing.B) {
5151
for i := 0; i < b.N; i++ {
5252
data.Next()
5353
bf := buff.Get().(*bytes.Buffer)
54+
bf.Reset()
5455
bf.Write(data.Value.([]byte))
5556

5657
idx := i % 20
@@ -89,6 +90,7 @@ func BenchmarkBufferFixedSizeSyncPool(b *testing.B) {
8990
data := make([]byte, 50)
9091
for i := 0; i < b.N; i++ {
9192
bf := buff.Get().(*bytes.Buffer)
93+
bf.Reset()
9294
bf.Write(data)
9395

9496
idx := i % 20

pool/buffer.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,15 @@ type buffer struct {
4343
calls [bucketSize]uint32
4444
}
4545

46+
// NewBuffer 创建一个动态评估需求容量的 BufferPool,它们共享一个底层 bytes.Buffer 区间池
47+
// Deprecated: 这是错误测试产生的结果,它并没有相较 sync.Pool 有明显优势,详细参看: https://github.com/thinkeridea/go-extend/issues/17
4648
func NewBuffer(size int) BufferPool {
4749
b := &buffer{}
4850
b.index = uint32(buffBucketIndex(size))
4951
return b
5052
}
5153

54+
// Get 从 Pool 中获取一个 *bytes.Buffer 实例, 该实例已经被 Reset
5255
func (p *buffer) Get() *bytes.Buffer {
5356
idx := atomic.LoadUint32(&p.index)
5457
v := buffBucket[idx].Get()
@@ -61,6 +64,7 @@ func (p *buffer) Get() *bytes.Buffer {
6164
return bytes.NewBuffer(make([]byte, 0, minSize<<idx))
6265
}
6366

67+
// Put 把 *bytes.Buffer 放回 Pool 中
6468
func (p *buffer) Put(b *bytes.Buffer) {
6569
if b.Cap() <= maxSize {
6670
buffBucket[buffBucketIndex(b.Cap())].Put(b)

0 commit comments

Comments
 (0)