I had the opportunity to revisit my interface dispatch benchmark 
(https://github.com/robaho/go-dispatch-test 
<https://github.com/robaho/go-dispatch-test>).

Previously, the dispatching using pointer receivers was nearly 3x slower (i.e. 
5.5 ns to 12.6 ns):

goos: darwin
goarch: amd64
pkg: github.com/robaho/go-dispatch-test
BenchmarkIDispatch-8        300000000            5.56 ns/op
BenchmarkDispatch-8         2000000000           1.57 ns/op
BenchmarkArrayParms-8         200000          9265 ns/op
PASS

and

goos: darwin
goarch: amd64
pkg: github.com/robaho/go-dispatch-test
BenchmarkIDispatch-8    100000000           12.6 ns/op
BenchmarkDispatch-8     2000000000           1.57 ns/op
PASS


With the latest Go 1.22.4, the performance difference has reversed ! (tests 
have been combined for simplicity).

goos: darwin
goarch: amd64
pkg: github.com/robaho/go-dispatch-test
cpu: Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
BenchmarkIDispatch-8        535263746            2.118 ns/op
BenchmarkIDispatchPtr-8     675721244            1.773 ns/op
BenchmarkDispatch-8         1000000000           0.6953 ns/op
BenchmarkArrayParms-8         184212          6440 ns/op
PASS

Pretty impressive work. The interface based dispatch is almost equal to the 
Java version now:

Benchmark                           Mode  Cnt     Score       Error  Units
TestJavaDispatch.TestArrayDispatch  avgt    3  4775.994 ± 13310.309  ns/op
TestJavaDispatch.TestDispatch       avgt    3     0.941 ±     0.088  ns/op
TestJavaDispatch.TestIDispatch      avgt    3     1.331 ±     0.146  ns/op

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/E96FF86B-1EF9-4678-8DE4-11D4C7080C0E%40me.com.

Reply via email to