File tree Expand file tree Collapse file tree 3 files changed +7
-1
lines changed
Expand file tree Collapse file tree 3 files changed +7
-1
lines changed Original file line number Diff line number Diff line change 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 并返回连接的字符串
1515func JoinInts (v []int , sep string ) string {
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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
4648func NewBuffer (size int ) BufferPool {
4749 b := & buffer {}
4850 b .index = uint32 (buffBucketIndex (size ))
4951 return b
5052}
5153
54+ // Get 从 Pool 中获取一个 *bytes.Buffer 实例, 该实例已经被 Reset
5255func (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 中
6468func (p * buffer ) Put (b * bytes.Buffer ) {
6569 if b .Cap () <= maxSize {
6670 buffBucket [buffBucketIndex (b .Cap ())].Put (b )
You can’t perform that action at this time.
0 commit comments