Home

Awesome

go-benchmark

Golang benchmarks used for optimizing code. The benchmarks were run with Golang 1.23.3 and 64 bit CPU on Linux using make benchmark-perflock.

interface{} vs unsafe.Pointer

ValueUnsafePointer-8          24.31n ±  3%
ValueInterface-8              216.2n ±  1%

Using defer vs not using it

Defer-8                       237.5n ±  1%
DeferNo-8                     146.7n ±  1%

Iterating a slice

SliceReadRange-8              24.21n ±  1%
SliceReadForward-8            40.07n ±  0%
SliceReadBackwards-8          40.54n ±  0%
SliceReadLastItemFirst-8      40.53n ±  7%

Passing a parameter by value vs pointer

ParameterPassedByPointer-8    9.906n ±  0%
ParameterPassedByValue-8      9.950n ±  2%

Using reflect vs cast

Reflect-8                     338.9n ±  0%
Cast-8                        216.4n ±  1%

Hashing algorithms that produce a 64 bit hash of an 8 byte input

Hashing64MD5-8                156.4n ±  1%
Hashing64SHA1-8               186.3n ±  1%
Hashing64SHA256-8             134.5n ±  0%
Hashing64SHA3B224-8           470.1n ±  1%
Hashing64SHA3B256-8           469.9n ±  2%
Hashing64RIPEMD160-8          399.4n ±  1%
Hashing64Blake2B-8            420.8n ±  1%
Hashing64Blake2BSimd-8        360.5n ±  1%
Hashing64Murmur3-8            59.85n ±  1%
Hashing64Murmur3Twmb-8        60.65n ±  1%
Hashing64SipHash-8            63.14n ±  1%
Hashing64XXHash-8             37.37n ±  1%
Hashing64XXHashpier-8         42.93n ±  2%
Hashing64HighwayHash-8        94.79n ±  1%

Filling a slice by index or append

SliceFillByIndex-8            19.20n ±  1%
SliceFillByIndexMake-8        19.21n ±  0%
SliceFillMakeAppend-8         30.91n ±  1%
SliceFillAppendNoMake-8       302.1n ± 10%
SliceFillSmallMakeAppend-8    336.9n ±  2%

Writing and reading an int atomic

AtomicInt32-8                 1.144µ ±  1%
AtomicInt64-8                 1.145µ ±  1%
AtomicUintptr-8               1.145µ ±  0%