Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use spinlock in "partly-multithreaded" operators instead of heavy-mutex #274

Merged
merged 8 commits into from
Sep 11, 2022

Conversation

victimsnino
Copy link
Owner

@victimsnino victimsnino commented Sep 11, 2022

Resolves #267

@codecov
Copy link

codecov bot commented Sep 11, 2022

Codecov Report

Merging #274 (f4c07ec) into main (ea672e7) will increase coverage by 0.00%.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##             main     #274   +/-   ##
=======================================
  Coverage   98.56%   98.57%           
=======================================
  Files          98       99    +1     
  Lines        1391     1399    +8     
=======================================
+ Hits         1371     1379    +8     
  Misses         20       20           
Impacted Files Coverage Δ
src/rpp/rpp/operators/combine_latest.hpp 100.00% <100.00%> (ø)
src/rpp/rpp/operators/concat.hpp 100.00% <100.00%> (ø)
src/rpp/rpp/operators/switch_on_next.hpp 100.00% <100.00%> (ø)
src/rpp/rpp/operators/take_until.hpp 100.00% <100.00%> (ø)
src/rpp/rpp/operators/with_latest_from.hpp 100.00% <100.00%> (ø)
src/rpp/rpp/utils/spinlock.hpp 100.00% <100.00%> (ø)

📣 We’re building smart automated test selection to slash your CI/CD build times. Learn more

@github-actions
Copy link
Contributor

BENCHMARK RESULTS (AUTOGENERATED)

ci-ubuntu-clang

Observable construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable construction 0.33ns 0.334603 1.00 0.33ns
Dynamic observable construction 29.17ns 29.154 1.00 24.58ns
Specific observable construction + as_dynamic 29.24ns 29.1372 1.00 24.43ns

Observable lift

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable lift specific observer 111.90ns 112.721 0.99 291.09ns
Specific observable lift dynamic observer 136.79ns 134.534 1.02 309.07ns
Dynamic observable lift specific observer 189.76ns 186.552 1.02 334.89ns
Dynamic observable lift dynamic observer 194.34ns 198.748 0.98 324.32ns

Observable subscribe

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe specific observer 77.34ns 82.7434 0.93 286.26ns
Specific observable subscribe dynamic observer 90.94ns 94.4467 0.96 300.37ns
Dynamic observable subscribe specific observer 150.12ns 154.162 0.97 326.70ns
Dynamic observable subscribe dynamic observer 148.64ns 143.908 1.03 320.40ns

Observable subscribe #2

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe lambda 76.61ns 76.3895 1.00 288.02ns
Dynamic observable subscribe lambda 140.08ns 144.087 0.97 326.15ns
Specific observable subscribe lambda without subscription 76.41ns 76.7121 1.00 291.70ns
Dynamic observable subscribe lambda without subscription 142.35ns 141.965 1.00 327.97ns
Specific observable subscribe specific subscriber 43.17ns 43.1114 1.00 223.48ns
Dynamic observable subscribe specific subscriber 105.62ns 109.539 0.96 269.12ns
Specific observable subscribe dynamic observer 43.51ns 43.6412 1.00 240.05ns
Dynamic observable subscribe dynamic observer 93.99ns 96.3358 0.98 257.02ns

Observer construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer construction 0.34ns 0.334762 1.00 0.33ns
Dynamic observer construction 29.14ns 29.1294 1.00 21.52ns
Specific observer construction + as_dynamic 29.18ns 29.2523 1.00 20.97ns

OnNext

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer OnNext 0.67ns 0.668973 1.00 0.67ns
Dynamic observer OnNext 1.68ns 1.67284 1.00 2.34ns

Subscriber construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Make subsriber 33.86ns 33.9069 1.00 64.47ns
Make copy of subscriber 16.74ns 16.748 1.00 4.68ns
Transform subsriber to dynamic 45.81ns 43.5782 1.05 26.61ns

Subscription

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
composite_subscription create 33.86ns 33.8866 1.00 52.44ns
composite_subscription add 47.54ns 50.0007 0.95 94.08ns
composite_subscription unsubscribe 43.82ns 44.1952 0.99 23.44ns

buffer

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
buffer 266.45ns 269.023 0.99 1813.08ns
sending of values from observable via buffer to subscriber 6.46ns 6.46221 1.00 27.46ns

chains creation test

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
long non-state chain creation + subscribe 281.05ns 270.896 1.04 511.13ns
long stateful chain creation + subscribe 400.25ns 401.263 1.00 802.94ns

combine_latest

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
combine_latest construction from observable via dot + subscribe 885.48ns 913.256 0.97 921.97ns
sending of values from observable via combine_latest to subscriber 27.71ns 36.5322 0.76 2.34ns

concat

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
concat 1881.53ns 1900.22 0.99 3361.06ns
concat_with 2207.82ns 2242.61 0.98 3715.05ns

distinct_until_changed

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
distinct_until_changed construction from observable via dot + subscribe 127.48ns 127.803 1.00 248.91ns
sending of values from observable via distinct_until_changed to subscriber 2.68ns 2.34511 1.14 1.34ns

first

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
first construction from observable via dot + subscribe 144.00ns 148.925 0.97 578.67ns
sending of values from observable via first to subscriber 0.67ns 0.66995 1.00 0.67ns

foundamental sources

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
empty 84.30ns 84.9886 0.99 615.92ns
error 134.78ns 137.583 0.98 748.13ns
never 47.15ns 47.009 1.00 249.46ns

from

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
from vector with int 99.40ns 101.428 0.98 646.66ns

immediate scheduler

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no any re-schedule 1.34ns 0.670804 2.00 114.82ns
re-schedule 10 times 11.39ns 7.1721 1.59 145.43ns

just

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
just send int 85.94ns 88.4067 0.97 625.77ns
just send variadic 117.08ns 118.978 0.98 741.68ns

last

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
last construction from observable via dot + subscribe 188.00ns 186.803 1.01 351.97ns
sending of values from observable via last to subscriber 2.68ns 2.53964 1.06 1.68ns

map

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
map construction from observable via dot + subscribe 88.98ns 89.1049 1.00 238.63ns
sending of values from observable via map to subscriber 1.01ns 1.00333 1.00 2.34ns

merge

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
merge 1836.96ns 1836.68 1.00 3391.85ns
merge_with 2164.53ns 2147.89 1.01 3562.40ns

observe_on

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
observe_on construction from observable via dot + subscribe 576.64ns 580.461 0.99 2633.54ns
sending of values from observable via observe_on to subscriber 88.27ns 89.1905 0.99 195.02ns

publish_subject callbacks

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
on_next 24.09ns 24.1208 1.00 11.16ns
on_error 0.67ns 0.674628 1.00 19.17ns
on_completed 0.67ns 0.673973 1.00 0.67ns

publish_subject routines

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
construct 196.66ns 198.239 0.99 177.93ns
get_observable 26.40ns 29.0693 0.91 50.00ns
get_subscriber 58.24ns 60.5513 0.96 13.60ns

repeat

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
repeat construction from observable via dot + subscribe 3930.93ns 3911.56 1.00 3057.14ns

scan

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
scan construction from observable via dot + subscribe 124.91ns 126.376 0.99 296.47ns
sending of values from observable via scan to subscriber 2.01ns 2.0084 1.00 2.34ns

single-threaded locks

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no-lock increment 2.02ns None . .
mutex lock increment 18.08ns None . .
spin-lock increment 9.03ns None . .

skip

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
skip construction from observable via dot + subscribe 120.76ns 120.418 1.00 479.16ns
sending of values from observable via skip to subscriber 2.01ns 2.01221 1.00 2.01ns

switch_on_next

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
switch_on_next construction from observable via dot + subscribe 2218.18ns 2246.27 0.99 2776.48ns
sending of values from observable via switch_on_next to subscriber 565.03ns 575.495 0.98 635.95ns

take

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take construction from observable via dot + subscribe 184.72ns 187.428 0.99 485.92ns
sending of values from observable via take to subscriber 2.35ns 2.34594 1.00 2.62ns

take_last

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take_last construction from observable via dot + subscribe 227.50ns 232.576 0.98 527.11ns
sending of values from observable via take_last to subscriber 3.38ns 3.3684 1.00 3.52ns

take_until

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take_until construction from observable via dot + subscribe 1051.12ns 1064.36 0.99 1160.90ns
sending of values from observable via take_until to subscriber 9.13ns 18.0997 0.50 1.79ns

trampoline scheduler

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no any re-schedule 14.08ns 11.7316 1.20 162.54ns
re-schedule 10 times 33.51ns 30.5396 1.10 191.62ns
recursively schedule 10 times 1361.43ns 1404.93 0.97 5482.90ns

window

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
window 2031.89ns 2019.34 1.01 3187.63ns
sending of values from observable via window to subscriber 544.53ns 548.548 0.99 367.40ns

with_latest_from

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
with_latest_from construction from observable via dot + subscribe 1044.85ns 1053.38 0.99 1209.07ns
sending of values from observable via with_latest_from to subscriber 26.40ns 35.1555 0.75 3.02ns

ci-ubuntu-gcc

Observable construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable construction 0.40ns 0.388296 1.03 0.40ns
Dynamic observable construction 28.79ns 29.2855 0.98 27.38ns
Specific observable construction + as_dynamic 28.91ns 28.546 1.01 28.08ns

Observable lift

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable lift specific observer 127.34ns 132.925 0.96 338.80ns
Specific observable lift dynamic observer 151.07ns 168.105 0.90 353.63ns
Dynamic observable lift specific observer 208.28ns 287.358 0.72 399.49ns
Dynamic observable lift dynamic observer 222.24ns 253.836 0.88 373.86ns

Observable subscribe

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe specific observer 79.89ns 90.0362 0.89 335.82ns
Specific observable subscribe dynamic observer 95.30ns 112.666 0.85 329.90ns
Dynamic observable subscribe specific observer 150.83ns 157.572 0.96 363.55ns
Dynamic observable subscribe dynamic observer 154.72ns 164.447 0.94 353.15ns

Observable subscribe #2

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe lambda 79.95ns 91.4396 0.87 322.18ns
Dynamic observable subscribe lambda 149.59ns 276.078 0.54 399.62ns
Specific observable subscribe lambda without subscription 80.22ns 84.1895 0.95 330.95ns
Dynamic observable subscribe lambda without subscription 150.94ns 175.449 0.86 365.26ns
Specific observable subscribe specific subscriber 49.04ns 52.3777 0.94 283.03ns
Dynamic observable subscribe specific subscriber 118.80ns 133.737 0.89 312.29ns
Specific observable subscribe dynamic observer 48.68ns 66.9864 0.73 283.85ns
Dynamic observable subscribe dynamic observer 104.14ns 100.741 1.03 293.96ns

Observer construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer construction 0.40ns 0.338249 1.19 0.40ns
Dynamic observer construction 28.78ns 31.4899 0.91 23.36ns
Specific observer construction + as_dynamic 28.84ns 32.3827 0.89 21.87ns

OnNext

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer OnNext 0.43ns 0.429861 1.00 0.42ns
Dynamic observer OnNext 2.01ns 2.38629 0.84 2.01ns

Subscriber construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Make subsriber 34.10ns 36.774 0.93 62.19ns
Make copy of subscriber 16.10ns 22.109 0.73 5.65ns
Transform subsriber to dynamic 45.08ns 42.3211 1.07 22.25ns

Subscription

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
composite_subscription create 33.81ns 39.2359 0.86 61.41ns
composite_subscription add 50.04ns 60.8483 0.82 97.53ns
composite_subscription unsubscribe 43.74ns 45.7916 0.96 21.00ns

buffer

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
buffer 254.44ns 354.532 0.72 2000.60ns
sending of values from observable via buffer to subscriber 6.16ns 10.4672 0.59 26.03ns

chains creation test

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
long non-state chain creation + subscribe 330.63ns 349.278 0.95 684.53ns
long stateful chain creation + subscribe 461.51ns 468.822 0.98 1108.29ns

combine_latest

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
combine_latest construction from observable via dot + subscribe 972.04ns 975.969 1.00 1186.00ns
sending of values from observable via combine_latest to subscriber 34.25ns 44.8896 0.76 1.47ns

concat

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
concat 2058.27ns 2222.16 0.93 3892.00ns
concat_with 2474.00ns 2715.86 0.91 4598.72ns

distinct_until_changed

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
distinct_until_changed construction from observable via dot + subscribe 141.56ns 161.313 0.88 374.04ns
sending of values from observable via distinct_until_changed to subscriber 3.62ns 4.18108 0.87 1.24ns

first

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
first construction from observable via dot + subscribe 167.97ns 172.915 0.97 749.85ns
sending of values from observable via first to subscriber 0.81ns 0.694021 1.16 0.81ns

foundamental sources

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
empty 86.45ns 98.5537 0.88 769.64ns
error 136.78ns 156.887 0.87 881.35ns
never 46.02ns 59.207 0.78 288.08ns

from

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
from vector with int 101.96ns 151.296 0.67 822.73ns

immediate scheduler

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no any re-schedule 1.20ns 1.09528 1.10 127.47ns
re-schedule 10 times 20.18ns 22.0975 0.91 158.46ns

just

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
just send int 88.91ns 95.5158 0.93 828.20ns
just send variadic 114.79ns 134.16 0.86 849.94ns

last

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
last construction from observable via dot + subscribe 202.47ns 217.66 0.93 436.90ns
sending of values from observable via last to subscriber 3.00ns 3.28116 0.92 1.17ns

map

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
map construction from observable via dot + subscribe 108.16ns 126.71 0.85 354.34ns
sending of values from observable via map to subscriber 1.00ns 0.99762 1.01 1.61ns

merge

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
merge 1992.13ns 2017.95 0.99 4132.25ns
merge_with 2408.58ns 2651.02 0.91 4419.86ns

observe_on

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
observe_on construction from observable via dot + subscribe 631.38ns 655.735 0.96 2698.33ns
sending of values from observable via observe_on to subscriber 93.90ns 89.961 1.04 233.82ns

publish_subject callbacks

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
on_next 29.73ns 25.8022 1.15 7.97ns
on_error 0.81ns 0.747282 1.08 16.16ns
on_completed 0.81ns 0.751245 1.08 1.21ns

publish_subject routines

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
construct 213.63ns 219.328 0.97 159.92ns
get_observable 33.34ns 27.7262 1.20 47.39ns
get_subscriber 63.89ns 63.4691 1.01 20.83ns

repeat

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
repeat construction from observable via dot + subscribe 4366.86ns 4449.03 0.98 3296.50ns

scan

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
scan construction from observable via dot + subscribe 135.77ns 178.284 0.76 400.44ns
sending of values from observable via scan to subscriber 3.21ns 4.25276 0.75 1.70ns

single-threaded locks

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no-lock increment 2.20ns None . .
mutex lock increment 22.09ns None . .
spin-lock increment 10.44ns None . .

skip

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
skip construction from observable via dot + subscribe 134.30ns 156.148 0.86 549.39ns
sending of values from observable via skip to subscriber 3.21ns 3.2818 0.98 2.75ns

switch_on_next

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
switch_on_next construction from observable via dot + subscribe 2457.00ns 2903.02 0.85 4448.43ns
sending of values from observable via switch_on_next to subscriber 654.25ns 639.108 1.02 1188.96ns

take

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take construction from observable via dot + subscribe 194.15ns 208.082 0.93 613.78ns
sending of values from observable via take to subscriber 4.02ns 4.70523 0.85 2.97ns

take_last

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take_last construction from observable via dot + subscribe 233.73ns 252.174 0.93 657.44ns
sending of values from observable via take_last to subscriber 3.33ns 4.00412 0.83 7.00ns

take_until

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take_until construction from observable via dot + subscribe 1130.35ns 1261.97 0.90 1684.72ns
sending of values from observable via take_until to subscriber 10.44ns 26.4153 0.40 2.05ns

trampoline scheduler

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no any re-schedule 20.18ns 24.3213 0.83 180.26ns
re-schedule 10 times 42.48ns 55.5911 0.76 215.97ns
recursively schedule 10 times 1439.62ns 1472.06 0.98 6065.60ns

window

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
window 2233.62ns 2412.69 0.93 3404.78ns
sending of values from observable via window to subscriber 605.67ns 637.635 0.95 406.80ns

with_latest_from

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
with_latest_from construction from observable via dot + subscribe 1124.83ns 1257.63 0.89 1450.65ns
sending of values from observable via with_latest_from to subscriber 29.73ns 43.1247 0.69 3.36ns

ci-windows

Observable construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable construction 1.50ns 1.50394 1.00 0.68ns
Dynamic observable construction 82.94ns 80.1981 1.03 123.77ns
Specific observable construction + as_dynamic 82.14ns 79.9683 1.03 123.38ns

Observable lift

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable lift specific observer 173.95ns 173.641 1.00 1218.14ns
Specific observable lift dynamic observer 205.01ns 200.856 1.02 1275.86ns
Dynamic observable lift specific observer 303.20ns 301.424 1.01 1393.79ns
Dynamic observable lift dynamic observer 261.24ns 261.216 1.00 1297.60ns

Observable subscribe

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe specific observer 138.19ns 141.773 0.97 1161.59ns
Specific observable subscribe dynamic observer 152.38ns 152.261 1.00 1251.62ns
Dynamic observable subscribe specific observer 256.84ns 254.929 1.01 1372.32ns
Dynamic observable subscribe dynamic observer 201.64ns 201.627 1.00 1241.57ns

Observable subscribe #2

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe lambda 138.72ns 139.536 0.99 1165.64ns
Dynamic observable subscribe lambda 256.56ns 255.444 1.00 1347.89ns
Specific observable subscribe lambda without subscription 138.38ns 138.762 1.00 1167.91ns
Dynamic observable subscribe lambda without subscription 256.50ns 255.61 1.00 1346.35ns
Specific observable subscribe specific subscriber 49.21ns 56.8093 0.87 840.64ns
Dynamic observable subscribe specific subscriber 166.01ns 165.045 1.01 1015.24ns
Specific observable subscribe dynamic observer 52.17ns 52.2651 1.00 870.31ns
Dynamic observable subscribe dynamic observer 101.00ns 101.205 1.00 910.46ns

Observer construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer construction 1.51ns 1.50546 1.00 1.51ns
Dynamic observer construction 84.13ns 81.8548 1.03 113.61ns
Specific observer construction + as_dynamic 83.39ns 82.1042 1.02 114.33ns

OnNext

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer OnNext 0.67ns 0.67004 1.00 0.67ns
Dynamic observer OnNext 2.49ns 2.035 1.23 2.09ns

Subscriber construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Make subsriber 85.27ns 84.9799 1.00 348.51ns
Make copy of subscriber 16.71ns 16.7069 1.00 31.62ns
Transform subsriber to dynamic 98.30ns 96.1856 1.02 150.02ns

Subscription

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
composite_subscription create 84.95ns 84.8328 1.00 343.93ns
composite_subscription add 71.10ns 71.1626 1.00 152.05ns
composite_subscription unsubscribe 65.77ns 63.7481 1.03 123.72ns

buffer

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
buffer 380.98ns 379.18 1.00 4459.00ns
sending of values from observable via buffer to subscriber 6.40ns 7.43022 0.86 91.46ns

chains creation test

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
long non-state chain creation + subscribe 283.86ns 286.244 0.99 1716.86ns
long stateful chain creation + subscribe 686.71ns 694.314 0.99 3170.38ns

combine_latest

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
combine_latest construction from observable via dot + subscribe 1775.27ns 1680.36 1.06 2995.25ns
sending of values from observable via combine_latest to subscriber 44.41ns 61.449 0.72 3.80ns

concat

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
concat 2764.00ns 2818.89 0.98 10589.50ns
concat_with 3453.25ns 3529.88 0.98 11617.00ns

distinct_until_changed

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
distinct_until_changed construction from observable via dot + subscribe 200.00ns 202.102 0.99 1031.64ns
sending of values from observable via distinct_until_changed to subscriber 3.68ns 4.28377 0.86 3.64ns

first

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
first construction from observable via dot + subscribe 146.88ns 147.06 1.00 2610.30ns
sending of values from observable via first to subscriber 2.35ns 2.53777 0.93 1.77ns

foundamental sources

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
empty 82.69ns 82.0044 1.01 2380.82ns
error 139.40ns 138.628 1.01 2477.00ns
never 51.02ns 51.0468 1.00 879.65ns

from

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
from vector with int 157.36ns 179.395 0.88 2436.60ns

immediate scheduler

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no any re-schedule 1.55ns 1.84403 0.84 407.67ns
re-schedule 10 times 112.91ns 97.7297 1.16 441.65ns

just

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
just send int 90.02ns 88.6683 1.02 2398.73ns
just send variadic 130.50ns 129.987 1.00 2454.50ns

last

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
last construction from observable via dot + subscribe 244.07ns 243.144 1.00 1444.12ns
sending of values from observable via last to subscriber 3.20ns 3.19671 1.00 3.38ns

map

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
map construction from observable via dot + subscribe 106.54ns 106.5 1.00 1149.77ns
sending of values from observable via map to subscriber 3.67ns 4.01112 0.92 7.36ns

merge

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
merge 2692.60ns 2690.1 1.00 10929.00ns
merge_with 3481.88ns 3413.5 1.02 11670.00ns

observe_on

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
observe_on construction from observable via dot + subscribe 822.27ns 828.067 0.99 5576.00ns
sending of values from observable via observe_on to subscriber 85.99ns 85.2881 1.01 844.03ns

publish_subject callbacks

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
on_next 20.36ns 20.1139 1.01 32.55ns
on_error 3.05ns 3.05411 1.00 20.65ns
on_completed 3.04ns 2.45031 1.24 0.68ns

publish_subject routines

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
construct 357.05ns 376.787 0.95 587.68ns
get_observable 28.82ns 26.0838 1.10 165.32ns
get_subscriber 50.22ns 50.1726 1.00 91.69ns

repeat

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
repeat construction from observable via dot + subscribe 6098.60ns 6107.0 1.00 11229.00ns

scan

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
scan construction from observable via dot + subscribe 205.26ns 206.975 0.99 1244.05ns
sending of values from observable via scan to subscriber 5.74ns 6.01993 0.95 8.89ns

single-threaded locks

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no-lock increment 1.88ns None . .
mutex lock increment 25.74ns None . .
spin-lock increment 9.06ns None . .

skip

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
skip construction from observable via dot + subscribe 194.92ns 194.698 1.00 1530.93ns
sending of values from observable via skip to subscriber 4.64ns 3.72654 1.25 3.35ns

switch_on_next

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
switch_on_next construction from observable via dot + subscribe 3880.86ns 3626.0 1.07 11933.70ns
sending of values from observable via switch_on_next to subscriber 851.57ns 870.667 0.98 3077.56ns

take

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take construction from observable via dot + subscribe 247.43ns 248.578 1.00 2510.92ns
sending of values from observable via take to subscriber 5.63ns 6.11726 0.92 6.15ns

take_last

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take_last construction from observable via dot + subscribe 344.85ns 343.591 1.00 2459.27ns
sending of values from observable via take_last to subscriber 4.37ns 4.4497 0.98 20.86ns

take_until

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
take_until construction from observable via dot + subscribe 1622.75ns 1637.94 0.99 5220.00ns
sending of values from observable via take_until to subscriber 11.14ns 29.6388 0.38 4.91ns

trampoline scheduler

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
no any re-schedule 18.79ns 21.5218 0.87 707.24ns
re-schedule 10 times 121.04ns 121.019 1.00 645.15ns
recursively schedule 10 times 2669.50ns 2628.8 1.02 19103.50ns

window

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
window 3000.11ns 2989.67 1.00 9796.50ns
sending of values from observable via window to subscriber 829.07ns 842.806 0.98 1625.94ns

with_latest_from

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
with_latest_from construction from observable via dot + subscribe 2015.00ns 2022.67 1.00 3734.67ns
sending of values from observable via with_latest_from to subscriber 37.90ns 56.9022 0.67 6.66ns

@sonarcloud
Copy link

sonarcloud bot commented Sep 11, 2022

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 10 Code Smells

0.0% 0.0% Coverage
0.0% 0.0% Duplication

@victimsnino victimsnino merged commit cba61a5 into main Sep 11, 2022
@victimsnino victimsnino deleted the spinlock branch September 11, 2022 20:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add effective spinlock implementation and use it in operators
1 participant