Skip to content

Instantly share code, notes, and snippets.

@ego008
Forked from lysu/test_compress.go
Created April 4, 2017 15:16
Show Gist options
  • Save ego008/295513c23dfd1aeaac94677320b9b03d to your computer and use it in GitHub Desktop.
Save ego008/295513c23dfd1aeaac94677320b9b03d to your computer and use it in GitHub Desktop.
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