Created
November 30, 2015 18:04
-
-
Save lysu/d85491f664009e425944 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 | |
} |
Author
lysu
commented
Nov 30, 2015
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment