-
-
Save ego008/295513c23dfd1aeaac94677320b9b03d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package comp_test | |
import ( | |
"bytes" | |
"compress/flate" | |
"github.com/golang/snappy" | |
"io" | |
"sync" | |
"testing" | |
) | |
const test = "1211111jdfklajdfoij142u3984dfjlkjaflkajfkjfa2rw345345g356nkjbnsigiji9ojwiornonsapfaioj2402unkl;lnmjh9j40u4kljsghfio2jirjiolfnjfdfa123iosajfoijffsadn nhjnoiflsajofj0o2jmnfoaphqjrowjroijnvl;a[jo[p9360ioh7" | |
func BenchmarkRawDeflat(b *testing.B) { | |
b.StopTimer() | |
b.StartTimer() | |
b.ReportAllocs() | |
b.ResetTimer() | |
for i := 0; i < b.N; i++ { | |
RawFlateEncode(test) | |
} | |
} | |
func BenchmarkPooledDeflate(b *testing.B) { | |
b.StopTimer() | |
b.StartTimer() | |
b.ReportAllocs() | |
b.ResetTimer() | |
for i := 0; i < b.N; i++ { | |
PooledFlateEncode(test) | |
} | |
} | |
func BenchmarkPooledSnappy(b *testing.B) { | |
b.StopTimer() | |
b.StartTimer() | |
b.ReportAllocs() | |
b.ResetTimer() | |
for i := 0; i < b.N; i++ { | |
PooledSnappyEncode(test) | |
} | |
} | |
func RawFlateEncode(input string) (result []byte, err error) { | |
var buf bytes.Buffer | |
w, err := flate.NewWriter(&buf, -1) | |
w.Write([]byte(input)) | |
w.Close() | |
result = buf.Bytes() | |
return | |
} | |
func PooledFlateEncode(input string) (result []byte, err error) { | |
var buf bytes.Buffer | |
w, err := newFlateWriter(&buf) | |
w.Write([]byte(input)) | |
w.Close() | |
flateWriterPool.Put(w) | |
result = buf.Bytes() | |
return | |
} | |
func PooledSnappyEncode(input string) (result []byte, err error) { | |
var buf bytes.Buffer | |
w := newSnappyWriter(&buf) | |
_, err = w.Write([]byte(input)) | |
if err != nil { | |
return nil, err | |
} | |
result = buf.Bytes() | |
snappyWriterPool.Put(w) | |
return | |
} | |
var flateWriterPool sync.Pool | |
func newFlateWriter(w io.Writer) (*flate.Writer, error) { | |
var err error | |
sw, ok := flateWriterPool.Get().(*flate.Writer) | |
if ok { | |
sw.Reset(w) | |
} else { | |
sw, err = flate.NewWriter(w, -1) | |
if err != nil { | |
return nil, err | |
} | |
} | |
return sw, nil | |
} | |
var snappyWriterPool sync.Pool | |
func newSnappyWriter(w io.Writer) *snappy.Writer { | |
sw, ok := snappyWriterPool.Get().(*snappy.Writer) | |
if ok { | |
sw.Reset(w) | |
} else { | |
sw = snappy.NewWriter(w) | |
} | |
return sw | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment