I've ported to Go
Closed this issue · 4 comments
Was a challenge cause of the dynamic usage within the library and crazy mutations during tesing... (propagate is silly) but here are the results with a port of the benchmarks. I extended to 10k WxH
TS
| benchmark | avg | min | p75 | p99 | max |
| ------------------------ | ---------------- | ----------- | ----------- | ----------- | ----------- |
| propagate: 1 * 1 | `879.40 ns/iter` | `863.08 ns` | `881.93 ns` | `931.41 ns` | `942.93 ns` |
| propagate: 1 * 10 | ` 4.13 µs/iter` | ` 4.09 µs` | ` 4.15 µs` | ` 4.19 µs` | ` 4.19 µs` |
| propagate: 1 * 100 | ` 36.05 µs/iter` | ` 35.21 µs` | ` 36.56 µs` | ` 36.85 µs` | ` 37.08 µs` |
| propagate: 1 * 1000 | `363.06 µs/iter` | `337.79 µs` | `360.45 µs` | `602.32 µs` | `828.24 µs` |
| propagate: 1 * 10000 | error: Maximum call stack size exceeded |
| propagate: 10 * 1 | ` 7.59 µs/iter` | ` 7.50 µs` | ` 7.64 µs` | ` 7.68 µs` | ` 7.75 µs` |
| propagate: 10 * 10 | ` 40.17 µs/iter` | ` 39.45 µs` | ` 40.42 µs` | ` 40.67 µs` | ` 40.90 µs` |
| propagate: 10 * 100 | `377.55 µs/iter` | `345.79 µs` | `364.73 µs` | `721.62 µs` | `825.40 µs` |
| propagate: 10 * 1000 | ` 3.77 ms/iter` | ` 3.52 ms` | ` 3.88 ms` | ` 4.55 ms` | ` 4.90 ms` |
| propagate: 10 * 10000 | error: Maximum call stack size exceeded |
| propagate: 100 * 1 | ` 72.93 µs/iter` | ` 70.33 µs` | ` 72.41 µs` | ` 84.55 µs` | `269.86 µs` |
| propagate: 100 * 10 | `396.95 µs/iter` | `383.79 µs` | `397.78 µs` | `470.70 µs` | `667.30 µs` |
| propagate: 100 * 100 | ` 3.61 ms/iter` | ` 3.54 ms` | ` 3.62 ms` | ` 3.81 ms` | ` 3.83 ms` |
| propagate: 100 * 1000 | ` 61.82 ms/iter` | ` 60.57 ms` | ` 62.03 ms` | ` 62.65 ms` | ` 64.07 ms` |
| propagate: 100 * 10000 | error: Maximum call stack size exceeded |
| propagate: 1000 * 1 | `726.04 µs/iter` | `707.31 µs` | `729.20 µs` | `895.32 µs` | `927.52 µs` |
| propagate: 1000 * 10 | ` 4.58 ms/iter` | ` 4.00 ms` | ` 4.76 ms` | ` 5.83 ms` | ` 6.07 ms` |
| propagate: 1000 * 100 | ` 58.94 ms/iter` | ` 58.18 ms` | ` 59.15 ms` | ` 59.90 ms` | ` 60.59 ms` |
| propagate: 1000 * 1000 | `640.89 ms/iter` | `636.51 ms` | `641.96 ms` | `644.19 ms` | `648.65 ms` |
| propagate: 1000 * 10000 | error: Maximum call stack size exceeded |
| propagate: 10000 * 1 | ` 8.18 ms/iter` | ` 7.79 ms` | ` 8.31 ms` | ` 8.49 ms` | ` 8.53 ms` |
| propagate: 10000 * 10 | ` 58.76 ms/iter` | ` 57.19 ms` | ` 58.67 ms` | ` 60.52 ms` | ` 62.19 ms` |
| propagate: 10000 * 100 | `569.88 ms/iter` | `559.99 ms` | `570.88 ms` | `578.03 ms` | `581.46 ms` |
| propagate: 10000 * 1000 | ` 7.13 s/iter` | ` 6.72 s` | ` 7.28 s` | ` 7.35 s` | ` 7.56 s` |
| propagate: 10000 * 10000 | error: Maximum call stack size exceeded |
Go
-+--------------------------+--------------+--------------+--------------+-------------+-------------+
-| BENCHMARK | AVG | MIN | P75 | P99 | MAX |
-+--------------------------+--------------+--------------+--------------+-------------+-------------+
-| propagate: 1 * 1 | 245ns | 120ns | 170ns | 1.182µs | 1.182µs |
-| propagate: 1 * 10 | 913ns | 862ns | 892ns | 1.182µs | 1.182µs |
-| propagate: 1 * 100 | 6.614µs | 5.751µs | 7.114µs | 7.876µs | 7.876µs |
-| propagate: 1 * 1000 | 54.281µs | 49.355µs | 55.137µs | 67.259µs | 67.259µs |
-| propagate: 1 * 10000 | 523.035µs | 452.471µs | 533.979µs | 897.419µs | 897.419µs |
-| propagate: 10 * 1 | 860ns | 811ns | 822ns | 1.133µs | 1.133µs |
-| propagate: 10 * 10 | 5.511µs | 5.099µs | 5.25µs | 8.636µs | 8.636µs |
-| propagate: 10 * 100 | 46.36µs | 46.109µs | 46.45µs | 47.241µs | 47.241µs |
-| propagate: 10 * 1000 | 516.253µs | 460.517µs | 516.505µs | 698.095µs | 698.095µs |
-| propagate: 10 * 10000 | 5.307504ms | 4.902171ms | 5.430799ms | 6.032809ms | 6.032809ms |
-| propagate: 100 * 1 | 8.105µs | 8.015µs | 8.046µs | 8.656µs | 8.656µs |
-| propagate: 100 * 10 | 53.76µs | 51.169µs | 57.311µs | 57.952µs | 57.952µs |
-| propagate: 100 * 100 | 528.4µs | 518.578µs | 531.203µs | 542.485µs | 542.485µs |
-| propagate: 100 * 1000 | 5.657486ms | 5.045708ms | 6.07453ms | 6.945918ms | 6.945918ms |
-| propagate: 100 * 10000 | 54.179415ms | 52.110433ms | 56.017539ms | 56.933642ms | 56.933642ms |
-| propagate: 1000 * 1 | 76.831µs | 75.094µs | 75.475µs | 87.819µs | 87.819µs |
-| propagate: 1000 * 10 | 612.015µs | 529.319µs | 590.787µs | 1.006358ms | 1.006358ms |
-| propagate: 1000 * 100 | 6.532832ms | 5.988413ms | 6.685005ms | 6.873769ms | 6.873769ms |
-| propagate: 1000 * 1000 | 55.287091ms | 53.40665ms | 55.554066ms | 57.087619ms | 57.087619ms |
-| propagate: 1000 * 10000 | 533.734675ms | 524.460397ms | 539.883531ms | 543.99004ms | 543.99004ms |
-| propagate: 10000 * 1 | 781.496µs | 767.147µs | 788.399µs | 803.497µs | 803.497µs |
-| propagate: 10000 * 10 | 9.808555ms | 9.239706ms | 9.857205ms | 11.427108ms | 11.427108ms |
-| propagate: 10000 * 100 | 64.933085ms | 64.196962ms | 65.353068ms | 65.612147ms | 65.612147ms |
-| propagate: 10000 * 1000 | 533.553871ms | 528.541617ms | 535.905941ms | 542.88353ms | 542.88353ms |
-| propagate: 10000 * 10000 | 5.391814406s | 5.326932802s | 5.379107299s | 5.69781948s | 5.69781948s |
-+--------------------------+--------------+--------------+--------------+-------------+-------------+
I'll clean up and make a PR for inclusion in the README
Thank you for the porting! I have added alien-signals-go to readme.
I think the TS's benchmark result is affected by --jitless, can you remove --jitless from the following line and update the result?
Line 41 in e871449
Much better! I figured they should be roughly similar in speed but the Node version taking about 10-12x the memory
Node
| benchmark | avg | min | p75 | p99 | max |
| ------------------------ | ---------------- | ----------- | ----------- | ----------- | ----------- |
| propagate: 1 * 1 | ` 48.61 ns/iter` | ` 44.73 ns` | ` 47.97 ns` | ` 73.81 ns` | `120.40 ns` |
| propagate: 1 * 10 | `268.84 ns/iter` | `256.60 ns` | `278.34 ns` | `294.42 ns` | `506.19 ns` |
| propagate: 1 * 100 | ` 2.93 µs/iter` | ` 2.90 µs` | ` 2.93 µs` | ` 2.96 µs` | ` 2.96 µs` |
| propagate: 1 * 1000 | ` 34.32 µs/iter` | ` 34.10 µs` | ` 34.46 µs` | ` 34.47 µs` | ` 34.56 µs` |
| propagate: 1 * 10000 | error: Maximum call stack size exceeded |
| propagate: 10 * 1 | `437.01 ns/iter` | `412.83 ns` | `445.33 ns` | `477.34 ns` | `577.09 ns` |
| propagate: 10 * 10 | ` 3.04 µs/iter` | ` 3.01 µs` | ` 3.04 µs` | ` 3.12 µs` | ` 3.29 µs` |
| propagate: 10 * 100 | ` 29.11 µs/iter` | ` 28.85 µs` | ` 29.34 µs` | ` 29.49 µs` | ` 29.52 µs` |
| propagate: 10 * 1000 | `296.37 µs/iter` | `272.57 µs` | `295.65 µs` | `393.12 µs` | `510.07 µs` |
| propagate: 10 * 10000 | error: Maximum call stack size exceeded |
| propagate: 100 * 1 | ` 4.65 µs/iter` | ` 4.60 µs` | ` 4.66 µs` | ` 4.71 µs` | ` 4.77 µs` |
| propagate: 100 * 10 | ` 33.41 µs/iter` | ` 33.23 µs` | ` 33.54 µs` | ` 33.66 µs` | ` 33.67 µs` |
| propagate: 100 * 100 | `305.75 µs/iter` | `285.65 µs` | `306.11 µs` | `389.72 µs` | `422.69 µs` |
| propagate: 100 * 1000 | ` 4.77 ms/iter` | ` 4.56 ms` | ` 4.84 ms` | ` 5.04 ms` | ` 5.11 ms` |
| propagate: 100 * 10000 | error: Maximum call stack size exceeded |
| propagate: 1000 * 1 | ` 45.51 µs/iter` | ` 45.22 µs` | ` 45.57 µs` | ` 45.74 µs` | ` 46.36 µs` |
| propagate: 1000 * 10 | `359.52 µs/iter` | `332.85 µs` | `362.54 µs` | `463.21 µs` | `558.22 µs` |
| propagate: 1000 * 100 | ` 5.51 ms/iter` | ` 5.28 ms` | ` 5.57 ms` | ` 5.74 ms` | ` 5.85 ms` |
| propagate: 1000 * 1000 | ` 57.36 ms/iter` | ` 56.54 ms` | ` 57.25 ms` | ` 57.46 ms` | ` 61.10 ms` |
| propagate: 1000 * 10000 | error: Maximum call stack size exceeded |
| propagate: 10000 * 1 | `485.35 µs/iter` | `448.03 µs` | `487.39 µs` | `625.87 µs` | `671.36 µs` |
| propagate: 10000 * 10 | ` 9.25 ms/iter` | ` 8.87 ms` | ` 9.37 ms` | ` 9.78 ms` | ` 10.03 ms` |
| propagate: 10000 * 100 | ` 62.25 ms/iter` | ` 61.21 ms` | ` 61.86 ms` | ` 63.15 ms` | ` 66.95 ms` |
| propagate: 10000 * 1000 | `676.41 ms/iter` | `659.72 ms` | `675.46 ms` | `710.27 ms` | `734.99 ms` |
| propagate: 10000 * 10000 | error: Maximum call stack size exceeded |The latest jit stuff is really impressive! I have done any optimization / profiling yet but did turn on PGO
Go
+--------------------------+--------------+--------------+--------------+--------------+--------------+
| BENCHMARK | AVG | MIN | P75 | P99 | MAX |
+--------------------------+--------------+--------------+--------------+--------------+--------------+
| propagate: 1 * 1 | 125ns | 110ns | 111ns | 210ns | 1.333µs |
| propagate: 1 * 10 | 688ns | 581ns | 712ns | 872ns | 1.032µs |
| propagate: 1 * 100 | 3.915µs | 3.767µs | 3.807µs | 4.709µs | 5.32µs |
| propagate: 1 * 1000 | 37.467µs | 36.741µs | 37.151µs | 45.127µs | 58.773µs |
| propagate: 1 * 10000 | 389.447µs | 361.536µs | 378.9µs | 514.461µs | 1.54186ms |
| propagate: 10 * 1 | 675ns | 661ns | 672ns | 762ns | 972ns |
| propagate: 10 * 10 | 4.332µs | 4.298µs | 4.329µs | 4.579µs | 4.709µs |
| propagate: 10 * 100 | 39.324µs | 38.945µs | 39.406µs | 43.173µs | 43.784µs |
| propagate: 10 * 1000 | 393.467µs | 373.399µs | 391.875µs | 580.558µs | 807.164µs |
| propagate: 10 * 10000 | 3.986958ms | 3.827672ms | 4.016606ms | 4.407768ms | 4.799042ms |
| propagate: 100 * 1 | 6.282µs | 6.051µs | 6.543µs | 7.374µs | 7.504µs |
| propagate: 100 * 10 | 40.828µs | 40.367µs | 40.609µs | 47.932µs | 56.579µs |
| propagate: 100 * 100 | 384.984µs | 378.459µs | 386.725µs | 426.411µs | 468.873µs |
| propagate: 100 * 1000 | 4.087396ms | 3.907364ms | 4.046493ms | 4.881872ms | 5.47789ms |
| propagate: 100 * 10000 | 43.243626ms | 42.381882ms | 43.421143ms | 48.683918ms | 49.529747ms |
| propagate: 1000 * 1 | 60.236µs | 59.034µs | 60.396µs | 69.644µs | 73.842µs |
| propagate: 1000 * 10 | 439.561µs | 416.562µs | 446.59µs | 463.663µs | 465.697µs |
| propagate: 1000 * 100 | 4.502427ms | 4.305091ms | 4.542128ms | 4.754507ms | 4.914113ms |
| propagate: 1000 * 1000 | 44.229612ms | 42.923915ms | 45.174851ms | 46.030368ms | 46.405901ms |
| propagate: 1000 * 10000 | 434.184596ms | 426.674225ms | 435.859695ms | 460.31353ms | 462.34876ms |
| propagate: 10000 * 1 | 642.171µs | 610.316µs | 637.768µs | 810.491µs | 1.059511ms |
| propagate: 10000 * 10 | 8.338133ms | 7.336088ms | 8.622125ms | 9.982575ms | 10.264829ms |
| propagate: 10000 * 100 | 52.092456ms | 50.629646ms | 52.723659ms | 56.869794ms | 57.060861ms |
| propagate: 10000 * 1000 | 439.609865ms | 435.477779ms | 441.222123ms | 448.839332ms | 450.429014ms |
| propagate: 10000 * 10000 | 4.530244316s | 4.286658058s | 4.529553663s | 5.666950049s | 6.713975996s |
+--------------------------+--------------+--------------+--------------+--------------+--------------+