From 207df5fc00113b81eaaab615785d09dea83ad726 Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Tue, 23 Mar 2021 22:10:12 +0800 Subject: [PATCH] =?UTF-8?q?NewWriterF=20with=20sync.Pool=20=E5=A4=9A?= =?UTF-8?q?=E6=AC=A1=E5=86=99=E5=85=A5=EF=BC=8C=E9=9C=80=E8=A6=81=E6=89=A9?= =?UTF-8?q?=E5=AE=B9=E6=97=B6=E9=80=9F=E5=BA=A6=E6=8F=90=E5=8D=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- binary/writer.go | 11 ++++++----- binary/writer_test.go | 24 ++++++++++++++---------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/binary/writer.go b/binary/writer.go index 33e488d0..86742eba 100644 --- a/binary/writer.go +++ b/binary/writer.go @@ -4,12 +4,12 @@ import ( "bytes" "encoding/binary" "encoding/hex" + "sync" ) type Writer bytes.Buffer -/* -var bufferPool = sync.Pool{ // todo sync.Pool 无法通过单元测试 +var bufferPool = sync.Pool{ New: func() interface{} { return new(bytes.Buffer) }, @@ -27,7 +27,6 @@ func PutBuffer(buf *bytes.Buffer) { bufferPool.Put(buf) } } -*/ func NewWriter() *Writer { return new(Writer) @@ -40,9 +39,11 @@ func PutWriter(w *Writer) { */ func NewWriterF(f func(writer *Writer)) []byte { - w := new(bytes.Buffer) + w := NewBuffer() f((*Writer)(w)) - return w.Bytes() + b := append([]byte(nil), w.Bytes()...) + PutBuffer(w) + return b } func (w *Writer) Write(b []byte) { diff --git a/binary/writer_test.go b/binary/writer_test.go index a62fb674..5c42d7bf 100644 --- a/binary/writer_test.go +++ b/binary/writer_test.go @@ -10,8 +10,8 @@ import ( ) func NewWriterFOld(f func(writer *Writer)) []byte { - w := (*Writer)(new(bytes.Buffer)) - f(w) + w := new(bytes.Buffer) + f((*Writer)(w)) return w.Bytes() } @@ -53,8 +53,8 @@ func TestNewWriterF(t *testing.T) { wg.Wait() } -func BenchmarkNewWriterFOld256(b *testing.B) { - test := make([]byte, 256) +func BenchmarkNewWriterFOld128(b *testing.B) { + test := make([]byte, 128) rand.Read(test) b.StartTimer() b.RunParallel(func(pb *testing.PB) { @@ -66,8 +66,8 @@ func BenchmarkNewWriterFOld256(b *testing.B) { }) } -func BenchmarkNewWriterF256(b *testing.B) { - test := make([]byte, 256) +func BenchmarkNewWriterF128(b *testing.B) { + test := make([]byte, 128) rand.Read(test) b.StartTimer() b.RunParallel(func(pb *testing.PB) { @@ -79,27 +79,31 @@ func BenchmarkNewWriterF256(b *testing.B) { }) } -func BenchmarkNewWriterFOld1024(b *testing.B) { - test := make([]byte, 1024) +func BenchmarkNewWriterFOld128_3(b *testing.B) { + test := make([]byte, 128) rand.Read(test) b.StartTimer() b.RunParallel(func(pb *testing.PB) { for pb.Next() { NewWriterFOld(func(w *Writer) { w.Write(test) + w.Write(test) + w.Write(test) }) } }) } -func BenchmarkNewWriterF1024(b *testing.B) { - test := make([]byte, 1024) +func BenchmarkNewWriterF128_3(b *testing.B) { + test := make([]byte, 128) rand.Read(test) b.StartTimer() b.RunParallel(func(pb *testing.PB) { for pb.Next() { NewWriterF(func(w *Writer) { w.Write(test) + w.Write(test) + w.Write(test) }) } })