• Marvin Stenger's avatar
    bytes: optimize Buffer's Write, WriteString, WriteByte, and WriteRune · c08ac367
    Marvin Stenger authored
    In the common case, the grow method only needs to reslice the internal
    buffer. Making another function call to grow can be expensive when Write
    is called very often with small pieces of data (like a byte or rune).
    Thus, we add a tryGrowByReslice method that is inlineable so that we can
    avoid an extra call in most cases.
    
    name                       old time/op    new time/op    delta
    WriteByte-4                  35.5µs ± 0%    17.4µs ± 1%   -51.03%  (p=0.000 n=19+20)
    WriteRune-4                  55.7µs ± 1%    38.7µs ± 1%   -30.56%  (p=0.000 n=18+19)
    BufferNotEmptyWriteRead-4     304µs ± 5%     283µs ± 3%    -6.86%  (p=0.000 n=19+17)
    BufferFullSmallReads-4       87.0µs ± 5%    66.8µs ± 2%   -23.26%  (p=0.000 n=17+17)
    
    name                       old speed      new speed      delta
    WriteByte-4                 115MB/s ± 0%   235MB/s ± 1%  +104.19%  (p=0.000 n=19+20)
    WriteRune-4                 221MB/s ± 1%   318MB/s ± 1%   +44.01%  (p=0.000 n=18+19)
    
    Fixes #17857
    
    Change-Id: I08dfb10a1c7e001817729dbfcc951bda12fe8814
    Reviewed-on: https://go-review.googlesource.com/42813Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
    Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    c08ac367
Name
Last commit
Last update
.github Loading commit data...
api Loading commit data...
doc Loading commit data...
lib/time Loading commit data...
misc Loading commit data...
src Loading commit data...
test Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
CONTRIBUTING.md Loading commit data...
CONTRIBUTORS Loading commit data...
LICENSE Loading commit data...
PATENTS Loading commit data...
README.md Loading commit data...
favicon.ico Loading commit data...
robots.txt Loading commit data...