/stack

Package stack implements a very fast and efficient general purpose Last-In-First-out (LIFO) stack data structure that is specifically optimized to perform when used by Microservices and serverless services running in production environments.

Primary LanguageGoMIT LicenseMIT

stack Build Status codecov Go Report Card GoDoc

Package stack updates the ef-ds stack to operate on *TestValue struct instead of the default "interface{}" type.

Why

This is a test to check the performance impact of a data structure that operates on "interface{}" vs the final, concrete type.

Below commands can be used to check the performance difference of the default interface vs the new TestValue stack.

Run below from the stack main folder.

benchstat testdata/BenchmarkMicroserviceInterfaceStack.txt testdata/BenchmarkMicroserviceTestValueStack.txt
benchstat testdata/BenchmarkFillInterfaceStack.txt testdata/BenchmarkFillTestValueStack.txt
benchstat testdata/BenchmarkRefillInterfaceStack.txt testdata/BenchmarkRefillTestValueStack.txt
benchstat testdata/BenchmarkRefillFullInterfaceStack.txt testdata/BenchmarkRefillFullTestValueStack.txt
benchstat testdata/BenchmarkSlowIncreaseInterfaceStack.txt testdata/BenchmarkSlowIncreaseTestValueStack.txt
benchstat testdata/BenchmarkSlowDecreaseInterfaceStack.txt testdata/BenchmarkSlowDecreaseTestValueStack.txt
benchstat testdata/BenchmarkStableInterfaceStack.txt testdata/BenchmarkStableTestValueStack.txt

Results

benchstat testdata/BenchmarkMicroserviceInterfaceStack.txt testdata/BenchmarkMicroserviceTestValueStack.txt
name        old time/op    new time/op    delta
/0-4          4.35ns ± 0%    4.36ns ± 1%     ~     (p=0.728 n=10+10)
/1-4           282ns ± 1%     274ns ± 1%   -2.88%  (p=0.000 n=9+10)
/10-4         2.03µs ± 0%    1.94µs ± 0%   -4.30%  (p=0.000 n=9+10)
/100-4        18.5µs ± 0%    17.7µs ± 1%   -4.75%  (p=0.000 n=9+10)
/1000-4        175µs ± 1%     168µs ± 1%   -3.91%  (p=0.000 n=9+10)
/10000-4      1.79ms ± 1%    1.71ms ± 1%   -4.60%  (p=0.000 n=9+9)
/100000-4     19.9ms ± 1%    18.7ms ± 1%   -6.11%  (p=0.000 n=9+10)
/1000000-4     207ms ± 3%     206ms ± 3%     ~     (p=0.529 n=10+10)

name        old alloc/op   new alloc/op   delta
/0-4           0.00B          0.00B          ~     (all equal)
/1-4            224B ± 0%      192B ± 0%  -14.29%  (p=0.000 n=10+10)
/10-4         1.49kB ± 0%    1.33kB ± 0%  -10.75%  (p=0.000 n=10+10)
/100-4        16.7kB ± 0%    14.0kB ± 0%  -16.30%  (p=0.000 n=10+10)
/1000-4        134kB ± 0%     123kB ± 0%   -8.15%  (p=0.000 n=10+10)
/10000-4      1.29MB ± 0%    1.21MB ± 0%   -6.56%  (p=0.000 n=10+10)
/100000-4     12.8MB ± 0%    12.0MB ± 0%   -6.29%  (p=0.000 n=10+10)
/1000000-4     128MB ± 0%     120MB ± 0%   -6.25%  (p=0.000 n=10+10)

name        old allocs/op  new allocs/op  delta
/0-4            0.00           0.00          ~     (all equal)
/1-4            9.00 ± 0%      9.00 ± 0%     ~     (all equal)
/10-4           73.0 ± 0%      73.0 ± 0%     ~     (all equal)
/100-4           705 ± 0%       705 ± 0%     ~     (all equal)
/1000-4        7.01k ± 0%     7.01k ± 0%     ~     (all equal)
/10000-4       70.0k ± 0%     70.0k ± 0%     ~     (all equal)
/100000-4       700k ± 0%      700k ± 0%     ~     (all equal)
/1000000-4     7.00M ± 0%     7.00M ± 0%     ~     (all equal)
benchstat testdata/BenchmarkFillInterfaceStack.txt testdata/BenchmarkFillTestValueStack.txt
name        old time/op    new time/op    delta
/0-4          1.17ns ± 3%    1.45ns ± 1%  +24.19%  (p=0.000 n=10+10)
/1-4           127ns ± 1%     119ns ± 1%   -6.23%  (p=0.000 n=9+10)
/10-4          463ns ± 1%     421ns ± 1%   -9.04%  (p=0.000 n=10+9)
/100-4        3.86µs ± 1%    3.31µs ± 0%  -14.28%  (p=0.000 n=10+10)
/1000-4       29.0µs ± 1%    26.8µs ± 1%   -7.73%  (p=0.000 n=10+10)
/10000-4       279µs ± 1%     263µs ± 1%   -5.75%  (p=0.000 n=9+9)
/100000-4     3.05ms ± 2%    3.46ms ± 8%  +13.41%  (p=0.000 n=10+10)
/1000000-4    74.3ms ±42%    85.7ms ±53%     ~     (p=0.353 n=10+10)

name        old alloc/op   new alloc/op   delta
/0-4           0.00B          0.00B          ~     (all equal)
/1-4            128B ± 0%       96B ± 0%  -25.00%  (p=0.000 n=10+10)
/10-4           528B ± 0%      368B ± 0%  -30.30%  (p=0.000 n=10+10)
/100-4        7.09kB ± 0%    4.37kB ± 0%  -38.37%  (p=0.000 n=10+10)
/1000-4       37.9kB ± 0%    27.0kB ± 0%  -28.81%  (p=0.000 n=10+10)
/10000-4       330kB ± 0%     245kB ± 0%  -25.67%  (p=0.000 n=10+10)
/100000-4     3.22MB ± 0%    2.41MB ± 0%  -25.05%  (p=0.000 n=10+10)
/1000000-4    32.1MB ± 0%    24.1MB ± 0%  -24.97%  (p=0.002 n=8+10)

name        old allocs/op  new allocs/op  delta
/0-4            0.00           0.00          ~     (all equal)
/1-4            3.00 ± 0%      3.00 ± 0%     ~     (all equal)
/10-4           13.0 ± 0%      13.0 ± 0%     ~     (all equal)
/100-4           105 ± 0%       105 ± 0%     ~     (all equal)
/1000-4        1.01k ± 0%     1.01k ± 0%     ~     (all equal)
/10000-4       10.0k ± 0%     10.0k ± 0%     ~     (all equal)
/100000-4       100k ± 0%      100k ± 0%     ~     (all equal)
/1000000-4     1.00M ± 0%     1.00M ± 0%     ~     (all equal)
benchstat testdata/BenchmarkRefillInterfaceStack.txt testdata/BenchmarkRefillTestValueStack.txt
name        old time/op    new time/op    delta
/0-4          16.3ns ± 1%    13.0ns ± 0%  -19.97%  (p=0.000 n=10+9)
/1-4           275ns ± 1%     262ns ± 1%   -4.62%  (p=0.000 n=10+9)
/10-4         2.60µs ± 1%    2.55µs ± 2%   -2.04%  (p=0.000 n=10+10)
/100-4        25.2µs ± 2%    24.8µs ± 0%   -1.84%  (p=0.000 n=10+9)
/1000-4        249µs ± 1%     246µs ± 2%     ~     (p=0.052 n=10+10)
/10000-4      2.59ms ± 4%    3.08ms ± 7%  +19.27%  (p=0.000 n=10+10)
/100000-4     40.3ms ± 5%    27.7ms ± 8%  -31.28%  (p=0.000 n=9+10)
/1000000-4     485ms ±29%     387ms ±10%  -20.16%  (p=0.003 n=9+10)

name        old alloc/op   new alloc/op   delta
/0-4           0.00B          0.00B          ~     (all equal)
/1-4            160B ± 0%      160B ± 0%     ~     (all equal)
/10-4         1.60kB ± 0%    1.60kB ± 0%     ~     (all equal)
/100-4        16.0kB ± 0%    16.0kB ± 0%     ~     (all equal)
/1000-4        160kB ± 0%     160kB ± 0%   -0.00%  (p=0.000 n=10+10)
/10000-4      1.60MB ± 0%    1.60MB ± 0%   -0.01%  (p=0.000 n=10+10)
/100000-4     16.0MB ± 0%    16.0MB ± 0%   -0.15%  (p=0.000 n=10+8)
/1000000-4     166MB ± 2%     163MB ± 0%   -1.84%  (p=0.000 n=10+9)

name        old allocs/op  new allocs/op  delta
/0-4            0.00           0.00          ~     (all equal)
/1-4            10.0 ± 0%      10.0 ± 0%     ~     (all equal)
/10-4            100 ± 0%       100 ± 0%     ~     (all equal)
/100-4         1.00k ± 0%     1.00k ± 0%     ~     (all equal)
/1000-4        10.0k ± 0%     10.0k ± 0%     ~     (all equal)
/10000-4        100k ± 0%      100k ± 0%     ~     (all equal)
/100000-4      1.00M ± 0%     1.00M ± 0%     ~     (p=0.087 n=10+10)
/1000000-4     10.0M ± 0%     10.0M ± 0%     ~     (p=0.786 n=10+9)
benchstat testdata/BenchmarkRefillFullInterfaceStack.txt testdata/BenchmarkRefillFullTestValueStack.txt
name        old time/op    new time/op    delta
/0-4          13.4ns ± 1%    13.1ns ± 1%   -2.54%  (p=0.000 n=10+10)
/1-4           293ns ± 3%     306ns ± 7%   +4.33%  (p=0.001 n=10+10)
/10-4         2.84µs ± 5%    3.08µs ± 5%   +8.43%  (p=0.000 n=10+10)
/100-4        27.0µs ± 1%    29.3µs ± 6%   +8.43%  (p=0.000 n=9+10)
/1000-4        272µs ± 3%     300µs ± 9%  +10.42%  (p=0.000 n=10+10)
/10000-4      2.70ms ± 1%    2.76ms ± 4%   +2.17%  (p=0.011 n=10+10)
/100000-4     37.8ms ± 4%    42.1ms ± 4%  +11.56%  (p=0.000 n=10+10)
/1000000-4     632ms ± 1%     385ms ±13%  -39.05%  (p=0.000 n=10+10)

name        old alloc/op   new alloc/op   delta
/0-4           0.00B          0.00B          ~     (all equal)
/1-4            160B ± 0%      160B ± 0%     ~     (all equal)
/10-4         1.60kB ± 0%    1.60kB ± 0%     ~     (all equal)
/100-4        16.0kB ± 0%    16.0kB ± 0%     ~     (all equal)
/1000-4        160kB ± 0%     160kB ± 0%     ~     (all equal)
/10000-4      1.60MB ± 0%    1.60MB ± 0%     ~     (all equal)
/100000-4     16.0MB ± 0%    16.0MB ± 0%     ~     (all equal)
/1000000-4     160MB ± 0%     160MB ± 0%     ~     (all equal)

name        old allocs/op  new allocs/op  delta
/0-4            0.00           0.00          ~     (all equal)
/1-4            10.0 ± 0%      10.0 ± 0%     ~     (all equal)
/10-4            100 ± 0%       100 ± 0%     ~     (all equal)
/100-4         1.00k ± 0%     1.00k ± 0%     ~     (all equal)
/1000-4        10.0k ± 0%     10.0k ± 0%     ~     (all equal)
/10000-4        100k ± 0%      100k ± 0%     ~     (all equal)
/100000-4      1.00M ± 0%     1.00M ± 0%     ~     (all equal)
/1000000-4     10.0M ± 0%     10.0M ± 0%     ~     (all equal)
benchstat testdata/BenchmarkSlowIncreaseInterfaceStack.txt testdata/BenchmarkSlowIncreaseTestValueStack.txt
name        old time/op    new time/op    delta
/0-4          1.16ns ± 0%    1.16ns ± 2%     ~     (p=0.776 n=8+9)
/1-4           151ns ± 1%     144ns ± 0%   -4.76%  (p=0.000 n=9+10)
/10-4          725ns ± 2%     682ns ± 1%   -5.96%  (p=0.000 n=9+10)
/100-4        6.48µs ± 4%    5.70µs ± 1%  -12.11%  (p=0.000 n=10+10)
/1000-4       56.3µs ± 4%    50.4µs ± 1%  -10.56%  (p=0.000 n=10+10)
/10000-4       554µs ± 8%     508µs ± 1%   -8.41%  (p=0.000 n=10+10)
/100000-4     7.93ms ±10%    4.94ms ± 1%  -37.66%  (p=0.000 n=10+10)
/1000000-4    76.7ms ±12%    73.1ms ±17%     ~     (p=0.387 n=9+9)

name        old alloc/op   new alloc/op   delta
/0-4           0.00B          0.00B          ~     (all equal)
/1-4            144B ± 0%      112B ± 0%  -22.22%  (p=0.000 n=10+10)
/10-4           688B ± 0%      528B ± 0%  -23.26%  (p=0.000 n=10+10)
/100-4        8.69kB ± 0%    5.97kB ± 0%  -31.31%  (p=0.000 n=10+10)
/1000-4       53.9kB ± 0%    43.0kB ± 0%  -20.26%  (p=0.000 n=10+10)
/10000-4       490kB ± 0%     405kB ± 0%  -17.28%  (p=0.000 n=10+10)
/100000-4     4.82MB ± 0%    4.01MB ± 0%  -16.73%  (p=0.000 n=10+9)
/1000000-4    48.1MB ± 0%    40.1MB ± 0%  -16.66%  (p=0.000 n=10+10)

name        old allocs/op  new allocs/op  delta
/0-4            0.00           0.00          ~     (all equal)
/1-4            4.00 ± 0%      4.00 ± 0%     ~     (all equal)
/10-4           23.0 ± 0%      23.0 ± 0%     ~     (all equal)
/100-4           205 ± 0%       205 ± 0%     ~     (all equal)
/1000-4        2.01k ± 0%     2.01k ± 0%     ~     (all equal)
/10000-4       20.0k ± 0%     20.0k ± 0%     ~     (all equal)
/100000-4       200k ± 0%      200k ± 0%     ~     (all equal)
/1000000-4     2.00M ± 0%     2.00M ± 0%     ~     (all equal)
benchstat testdata/BenchmarkSlowDecreaseInterfaceStack.txt testdata/BenchmarkSlowDecreaseTestValueStack.txt
name        old time/op    new time/op    delta
/0-4          0.89ns ± 6%    0.58ns ± 0%  -35.05%  (p=0.000 n=10+8)
/1-4          30.5ns ± 7%    28.2ns ± 1%   -7.48%  (p=0.000 n=9+10)
/10-4          299ns ± 2%     287ns ± 1%   -3.95%  (p=0.000 n=10+10)
/100-4        2.90µs ± 1%    2.82µs ± 2%   -2.70%  (p=0.000 n=9+9)
/1000-4       28.3µs ± 1%    27.9µs ± 1%   -1.54%  (p=0.000 n=9+10)
/10000-4       283µs ± 1%     279µs ± 0%   -1.47%  (p=0.000 n=10+8)
/100000-4     2.82ms ± 1%    2.78ms ± 1%   -1.25%  (p=0.000 n=10+10)
/1000000-4    28.1ms ± 1%    27.8ms ± 0%   -1.19%  (p=0.000 n=10+8)

name        old alloc/op   new alloc/op   delta
/0-4           0.00B          0.00B          ~     (all equal)
/1-4           16.0B ± 0%     16.0B ± 0%     ~     (all equal)
/10-4           160B ± 0%      160B ± 0%     ~     (all equal)
/100-4        1.60kB ± 0%    1.60kB ± 0%     ~     (all equal)
/1000-4       16.0kB ± 0%    16.0kB ± 0%     ~     (all equal)
/10000-4       160kB ± 0%     160kB ± 0%     ~     (all equal)
/100000-4     1.60MB ± 0%    1.60MB ± 0%     ~     (all equal)
/1000000-4    16.0MB ± 0%    16.0MB ± 0%     ~     (all equal)

name        old allocs/op  new allocs/op  delta
/0-4            0.00           0.00          ~     (all equal)
/1-4            1.00 ± 0%      1.00 ± 0%     ~     (all equal)
/10-4           10.0 ± 0%      10.0 ± 0%     ~     (all equal)
/100-4           100 ± 0%       100 ± 0%     ~     (all equal)
/1000-4        1.00k ± 0%     1.00k ± 0%     ~     (all equal)
/10000-4       10.0k ± 0%     10.0k ± 0%     ~     (all equal)
/100000-4       100k ± 0%      100k ± 0%     ~     (all equal)
/1000000-4     1.00M ± 0%     1.00M ± 0%     ~     (all equal)
benchstat testdata/BenchmarkStableInterfaceStack.txt testdata/BenchmarkStableTestValueStack.txt
name        old time/op    new time/op    delta
/0-4          0.58ns ± 0%    0.87ns ± 1%  +50.69%  (p=0.000 n=9+10)
/1-4          28.0ns ± 3%    29.2ns ± 8%   +4.43%  (p=0.014 n=10+10)
/10-4          280ns ± 3%     294ns ± 6%   +4.96%  (p=0.000 n=9+9)
/100-4        2.75µs ± 2%    2.88µs ± 4%   +4.62%  (p=0.000 n=10+9)
/1000-4       27.4µs ± 4%    30.1µs ± 4%   +9.84%  (p=0.000 n=10+10)
/10000-4       275µs ± 3%     286µs ± 6%   +3.77%  (p=0.009 n=10+10)
/100000-4     2.73ms ± 4%    2.80ms ± 5%     ~     (p=0.105 n=10+10)
/1000000-4    27.4ms ± 3%    28.4ms ± 7%     ~     (p=0.052 n=10+10)

name        old alloc/op   new alloc/op   delta
/0-4           0.00B          0.00B          ~     (all equal)
/1-4           16.0B ± 0%     16.0B ± 0%     ~     (all equal)
/10-4           160B ± 0%      160B ± 0%     ~     (all equal)
/100-4        1.60kB ± 0%    1.60kB ± 0%     ~     (all equal)
/1000-4       16.0kB ± 0%    16.0kB ± 0%     ~     (all equal)
/10000-4       160kB ± 0%     160kB ± 0%     ~     (all equal)
/100000-4     1.60MB ± 0%    1.60MB ± 0%     ~     (all equal)
/1000000-4    16.0MB ± 0%    16.0MB ± 0%     ~     (all equal)

name        old allocs/op  new allocs/op  delta
/0-4            0.00           0.00          ~     (all equal)
/1-4            1.00 ± 0%      1.00 ± 0%     ~     (all equal)
/10-4           10.0 ± 0%      10.0 ± 0%     ~     (all equal)
/100-4           100 ± 0%       100 ± 0%     ~     (all equal)
/1000-4        1.00k ± 0%     1.00k ± 0%     ~     (all equal)
/10000-4       10.0k ± 0%     10.0k ± 0%     ~     (all equal)
/100000-4       100k ± 0%      100k ± 0%     ~     (all equal)
/1000000-4     1.00M ± 0%     1.00M ± 0%     ~     (all equal)