• Rob Pike's avatar
    encoding/gob: use simple append-only buffer for encoding · 65dde1ed
    Rob Pike authored
    Bytes buffers have more API and are a little slower. Since appending
    is a key part of the path in encode, using a faster implementation
    speeds things up measurably.
    The couple of positive swings are likely garbage-collection related
    since memory allocation looks different in the benchmark now.
    I am not concerned by them.
    
    benchmark                            old ns/op     new ns/op     delta
    BenchmarkEndToEndPipe                6620          6388          -3.50%
    BenchmarkEndToEndByteBuffer          3548          3600          +1.47%
    BenchmarkEndToEndSliceByteBuffer     336678        367980        +9.30%
    BenchmarkEncodeComplex128Slice       78199         71297         -8.83%
    BenchmarkEncodeFloat64Slice          37731         32258         -14.51%
    BenchmarkEncodeInt32Slice            26780         22977         -14.20%
    BenchmarkEncodeStringSlice           35882         26492         -26.17%
    BenchmarkDecodeComplex128Slice       194819        185126        -4.98%
    BenchmarkDecodeFloat64Slice          120538        120102        -0.36%
    BenchmarkDecodeInt32Slice            106442        107275        +0.78%
    BenchmarkDecodeStringSlice           272902        269866        -1.11%
    
    LGTM=ruiu
    R=golang-codereviews, ruiu
    CC=golang-codereviews
    https://golang.org/cl/160990043
    65dde1ed
encode.go 19.8 KB