1
0
mirror of https://github.com/Mrs4s/MiraiGo.git synced 2025-05-04 19:17:38 +08:00

NewWriterF with sync.Pool

多次写入,需要扩容时速度提升
This commit is contained in:
wdvxdr 2021-03-23 22:10:12 +08:00
parent f3beaae4e4
commit 207df5fc00
No known key found for this signature in database
GPG Key ID: 55FF1414A69CEBA6
2 changed files with 20 additions and 15 deletions

View File

@ -4,12 +4,12 @@ import (
"bytes" "bytes"
"encoding/binary" "encoding/binary"
"encoding/hex" "encoding/hex"
"sync"
) )
type Writer bytes.Buffer type Writer bytes.Buffer
/* var bufferPool = sync.Pool{
var bufferPool = sync.Pool{ // todo sync.Pool 无法通过单元测试
New: func() interface{} { New: func() interface{} {
return new(bytes.Buffer) return new(bytes.Buffer)
}, },
@ -27,7 +27,6 @@ func PutBuffer(buf *bytes.Buffer) {
bufferPool.Put(buf) bufferPool.Put(buf)
} }
} }
*/
func NewWriter() *Writer { func NewWriter() *Writer {
return new(Writer) return new(Writer)
@ -40,9 +39,11 @@ func PutWriter(w *Writer) {
*/ */
func NewWriterF(f func(writer *Writer)) []byte { func NewWriterF(f func(writer *Writer)) []byte {
w := new(bytes.Buffer) w := NewBuffer()
f((*Writer)(w)) f((*Writer)(w))
return w.Bytes() b := append([]byte(nil), w.Bytes()...)
PutBuffer(w)
return b
} }
func (w *Writer) Write(b []byte) { func (w *Writer) Write(b []byte) {

View File

@ -10,8 +10,8 @@ import (
) )
func NewWriterFOld(f func(writer *Writer)) []byte { func NewWriterFOld(f func(writer *Writer)) []byte {
w := (*Writer)(new(bytes.Buffer)) w := new(bytes.Buffer)
f(w) f((*Writer)(w))
return w.Bytes() return w.Bytes()
} }
@ -53,8 +53,8 @@ func TestNewWriterF(t *testing.T) {
wg.Wait() wg.Wait()
} }
func BenchmarkNewWriterFOld256(b *testing.B) { func BenchmarkNewWriterFOld128(b *testing.B) {
test := make([]byte, 256) test := make([]byte, 128)
rand.Read(test) rand.Read(test)
b.StartTimer() b.StartTimer()
b.RunParallel(func(pb *testing.PB) { b.RunParallel(func(pb *testing.PB) {
@ -66,8 +66,8 @@ func BenchmarkNewWriterFOld256(b *testing.B) {
}) })
} }
func BenchmarkNewWriterF256(b *testing.B) { func BenchmarkNewWriterF128(b *testing.B) {
test := make([]byte, 256) test := make([]byte, 128)
rand.Read(test) rand.Read(test)
b.StartTimer() b.StartTimer()
b.RunParallel(func(pb *testing.PB) { b.RunParallel(func(pb *testing.PB) {
@ -79,27 +79,31 @@ func BenchmarkNewWriterF256(b *testing.B) {
}) })
} }
func BenchmarkNewWriterFOld1024(b *testing.B) { func BenchmarkNewWriterFOld128_3(b *testing.B) {
test := make([]byte, 1024) test := make([]byte, 128)
rand.Read(test) rand.Read(test)
b.StartTimer() b.StartTimer()
b.RunParallel(func(pb *testing.PB) { b.RunParallel(func(pb *testing.PB) {
for pb.Next() { for pb.Next() {
NewWriterFOld(func(w *Writer) { NewWriterFOld(func(w *Writer) {
w.Write(test) w.Write(test)
w.Write(test)
w.Write(test)
}) })
} }
}) })
} }
func BenchmarkNewWriterF1024(b *testing.B) { func BenchmarkNewWriterF128_3(b *testing.B) {
test := make([]byte, 1024) test := make([]byte, 128)
rand.Read(test) rand.Read(test)
b.StartTimer() b.StartTimer()
b.RunParallel(func(pb *testing.PB) { b.RunParallel(func(pb *testing.PB) {
for pb.Next() { for pb.Next() {
NewWriterF(func(w *Writer) { NewWriterF(func(w *Writer) {
w.Write(test) w.Write(test)
w.Write(test)
w.Write(test)
}) })
} }
}) })