Skip to content

Try to speedup subjects#596

Merged
victimsnino merged 14 commits into
v2from
try_to_speedup_subjects
Jun 6, 2024
Merged

Try to speedup subjects#596
victimsnino merged 14 commits into
v2from
try_to_speedup_subjects

Conversation

@victimsnino
Copy link
Copy Markdown
Owner

No description provided.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 3, 2024

BENCHMARK RESULTS (AUTOGENERATED)

ci-ubuntu-gcc

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 302.00 ns 2.16 ns 2.16 ns 1.00
Subscribe empty callbacks to empty observable via pipe operator 307.38 ns 2.16 ns 2.16 ns 1.00

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 691.61 ns 0.31 ns 0.31 ns 1.00
from array of 1 - create + subscribe + current_thread 1039.97 ns 3.70 ns 3.70 ns 1.00
concat_as_source of just(1 immediate) create + subscribe 2247.33 ns 113.27 ns 120.01 ns 0.94
defer from array of 1 - defer + create + subscribe + immediate 730.83 ns 0.31 ns 0.31 ns 1.00
interval - interval + take(3) + subscribe + immediate 2107.18 ns 59.19 ns 59.24 ns 1.00
interval - interval + take(3) + subscribe + current_thread 3047.06 ns 32.40 ns 32.40 ns 1.00
from array of 1 - create + as_blocking + subscribe + new_thread 29252.27 ns 27352.26 ns 27377.71 ns 1.00
from array of 1000 - create + as_blocking + subscribe + new_thread 39869.88 ns 50965.19 ns 50808.87 ns 1.00
concat_as_source of just(1 immediate) and just(1,2 immediate)create + subscribe 3519.75 ns 144.01 ns 148.02 ns 0.97

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 1063.74 ns 0.31 ns 0.31 ns 1.00
immediate_just+filter(true)+subscribe 855.51 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+skip(1)+subscribe 997.73 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,1,2)+distinct_until_changed()+subscribe 871.21 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+first()+subscribe 1230.64 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+last()+subscribe 930.26 ns 0.31 ns 0.31 ns 1.00
immediate_just+take_last(1)+subscribe 1120.12 ns 18.20 ns 18.22 ns 1.00

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 269.79 ns 2.16 ns 2.16 ns 1.00
current_thread scheduler create worker + schedule 365.56 ns 6.18 ns 5.86 ns 1.05
current_thread scheduler create worker + schedule + recursive schedule 833.00 ns 56.36 ns 55.57 ns 1.01

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 852.74 ns 0.31 ns 0.31 ns 1.00
immediate_just+scan(10, std::plus)+subscribe 910.24 ns 0.31 ns 0.31 ns 1.00
immediate_just+flat_map(immediate_just(v*2))+subscribe 2366.96 ns 163.27 ns 171.19 ns 0.95
immediate_just+buffer(2)+subscribe 1560.62 ns 13.60 ns 13.89 ns 0.98
immediate_just+window(2)+subscribe + subscsribe inner 2404.58 ns 1118.62 ns 1028.99 ns 1.09

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 833.00 ns - - 0.00
immediate_just+take_while(true)+subscribe 832.06 ns 0.31 ns 0.31 ns 1.00

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 2024.31 ns 0.31 ns 0.31 ns 1.00

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 3591.33 ns 177.19 ns 182.17 ns 0.97
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 3683.59 ns 166.51 ns 178.82 ns 0.93
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 132.09 ns 129.60 ns 1.02
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 3523.52 ns 1044.92 ns 942.41 ns 1.11
immediate_just(1) + zip(immediate_just(2)) + subscribe 2106.77 ns 213.57 ns 230.83 ns 0.93

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 34.56 ns 14.68 ns 14.86 ns 0.99
subscribe 100 observers to publish_subject 198888.00 ns 15371.53 ns 52053.20 ns 0.30
100 on_next to 100 observers to publish_subject 27718.90 ns 17716.24 ns 28711.69 ns 0.62

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1406.44 ns 13.27 ns 13.27 ns 1.00
basic sample with immediate scheduler 1367.34 ns 5.55 ns 5.55 ns 1.00

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 925.36 ns 0.31 ns 0.31 ns 1.00

Error Handling Operators

name rxcpp rpp prev rpp ratio
create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe 2029.26 ns 990.51 ns 978.84 ns 1.01

ci-macos

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 970.97 ns 3.89 ns 4.34 ns 0.90
Subscribe empty callbacks to empty observable via pipe operator 965.13 ns 3.91 ns 3.89 ns 1.01

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 1930.39 ns 0.23 ns 0.23 ns 1.00
from array of 1 - create + subscribe + current_thread 2361.45 ns 31.64 ns 32.70 ns 0.97
concat_as_source of just(1 immediate) create + subscribe 5241.87 ns 333.50 ns 336.27 ns 0.99
defer from array of 1 - defer + create + subscribe + immediate 1958.50 ns 0.23 ns 0.23 ns 1.00
interval - interval + take(3) + subscribe + immediate 4951.00 ns 114.54 ns 115.06 ns 1.00
interval - interval + take(3) + subscribe + current_thread 6050.01 ns 95.26 ns 96.91 ns 0.98
from array of 1 - create + as_blocking + subscribe + new_thread 82170.60 ns 81038.50 ns 77282.14 ns 1.05
from array of 1000 - create + as_blocking + subscribe + new_thread 89125.75 ns 87538.08 ns 83798.43 ns 1.04
concat_as_source of just(1 immediate) and just(1,2 immediate)create + subscribe 8097.99 ns 371.66 ns 378.05 ns 0.98

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 2936.17 ns 0.24 ns 0.22 ns 1.08
immediate_just+filter(true)+subscribe 2156.55 ns 0.29 ns 0.22 ns 1.31
immediate_just(1,2)+skip(1)+subscribe 2763.52 ns 0.23 ns 0.22 ns 1.05
immediate_just(1,1,2)+distinct_until_changed()+subscribe 2141.45 ns 0.47 ns 0.45 ns 1.05
immediate_just(1,2)+first()+subscribe 3295.40 ns 0.29 ns 0.22 ns 1.29
immediate_just(1,2)+last()+subscribe 2435.02 ns 0.25 ns 0.22 ns 1.10
immediate_just+take_last(1)+subscribe 3229.52 ns 77.07 ns 68.61 ns 1.12

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 847.64 ns 4.13 ns 4.18 ns 0.99
current_thread scheduler create worker + schedule 1162.89 ns 36.17 ns 37.01 ns 0.98
current_thread scheduler create worker + schedule + recursive schedule 1978.38 ns 201.81 ns 207.30 ns 0.97

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 2200.83 ns 4.01 ns 4.20 ns 0.96
immediate_just+scan(10, std::plus)+subscribe 2347.18 ns 0.47 ns 0.45 ns 1.06
immediate_just+flat_map(immediate_just(v*2))+subscribe 5041.58 ns 403.86 ns 383.66 ns 1.05
immediate_just+buffer(2)+subscribe 2419.96 ns 70.89 ns 66.84 ns 1.06
immediate_just+window(2)+subscribe + subscsribe inner 5445.81 ns 2399.51 ns 2220.63 ns 1.08

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 2046.83 ns - - 0.00
immediate_just+take_while(true)+subscribe 2056.39 ns 0.23 ns 0.23 ns 0.98

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 4941.61 ns 4.91 ns 5.51 ns 0.89

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 7211.35 ns 426.72 ns 441.71 ns 0.97
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 8139.20 ns 432.08 ns 439.54 ns 0.98
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 449.72 ns 459.85 ns 0.98
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 7735.60 ns 1856.87 ns 1920.23 ns 0.97
immediate_just(1) + zip(immediate_just(2)) + subscribe 4985.20 ns 825.13 ns 851.59 ns 0.97

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 78.91 ns 52.02 ns 49.27 ns 1.06
subscribe 100 observers to publish_subject 365187.33 ns 43302.32 ns 124131.75 ns 0.35
100 on_next to 100 observers to publish_subject 62342.47 ns 22168.91 ns 29554.13 ns 0.75

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 2734.40 ns 73.17 ns 68.90 ns 1.06
basic sample with immediate scheduler 2756.67 ns 18.13 ns 18.65 ns 0.97

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 2593.02 ns 0.24 ns 0.23 ns 1.03

Error Handling Operators

name rxcpp rpp prev rpp ratio
create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe 9134.40 ns 4824.96 ns 4078.33 ns 1.18

ci-ubuntu-clang

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 269.02 ns 1.55 ns 0.88 ns 1.77
Subscribe empty callbacks to empty observable via pipe operator 272.87 ns 1.54 ns 0.88 ns 1.76

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 592.74 ns 0.34 ns 0.31 ns 1.10
from array of 1 - create + subscribe + current_thread 808.13 ns 4.32 ns 4.01 ns 1.08
concat_as_source of just(1 immediate) create + subscribe 2372.36 ns 135.07 ns 137.78 ns 0.98
defer from array of 1 - defer + create + subscribe + immediate 784.71 ns 0.31 ns 0.31 ns 1.00
interval - interval + take(3) + subscribe + immediate 2219.89 ns 58.31 ns 58.34 ns 1.00
interval - interval + take(3) + subscribe + current_thread 3202.13 ns 30.88 ns 30.88 ns 1.00
from array of 1 - create + as_blocking + subscribe + new_thread 31208.21 ns 28556.33 ns 28788.03 ns 0.99
from array of 1000 - create + as_blocking + subscribe + new_thread 44755.08 ns 37043.03 ns 34170.36 ns 1.08
concat_as_source of just(1 immediate) and just(1,2 immediate)create + subscribe 3738.88 ns 157.32 ns 162.85 ns 0.97

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 1148.01 ns 0.31 ns 0.31 ns 1.00
immediate_just+filter(true)+subscribe 846.29 ns 0.31 ns 0.39 ns 0.79
immediate_just(1,2)+skip(1)+subscribe 1097.76 ns 0.31 ns 0.31 ns 0.99
immediate_just(1,1,2)+distinct_until_changed()+subscribe 867.17 ns 0.62 ns 0.62 ns 1.00
immediate_just(1,2)+first()+subscribe 1383.60 ns 0.31 ns 0.33 ns 0.94
immediate_just(1,2)+last()+subscribe 1003.84 ns 0.31 ns 0.31 ns 1.00
immediate_just+take_last(1)+subscribe 1186.13 ns 0.31 ns 0.31 ns 1.00

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 282.17 ns 1.54 ns 0.88 ns 1.76
current_thread scheduler create worker + schedule 391.90 ns 4.79 ns 4.02 ns 1.19
current_thread scheduler create worker + schedule + recursive schedule 856.57 ns 55.85 ns 57.29 ns 0.97

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 853.23 ns 0.31 ns 0.31 ns 1.00
immediate_just+scan(10, std::plus)+subscribe 969.26 ns 0.32 ns 0.31 ns 1.03
immediate_just+flat_map(immediate_just(v*2))+subscribe 2256.11 ns 136.80 ns 139.37 ns 0.98
immediate_just+buffer(2)+subscribe 1566.24 ns 14.20 ns 13.88 ns 1.02
immediate_just+window(2)+subscribe + subscsribe inner 2514.54 ns 935.41 ns 907.82 ns 1.03

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 832.23 ns - - 0.00
immediate_just+take_while(true)+subscribe 846.73 ns 0.31 ns 0.31 ns 1.00

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 2044.93 ns 0.31 ns 0.31 ns 1.00

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 3239.31 ns 158.35 ns 160.35 ns 0.99
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 3709.77 ns 146.09 ns 146.17 ns 1.00
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 144.08 ns 142.26 ns 1.01
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 3364.30 ns 850.14 ns 843.52 ns 1.01
immediate_just(1) + zip(immediate_just(2)) + subscribe 2218.06 ns 206.66 ns 203.80 ns 1.01

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 53.69 ns 17.69 ns 19.25 ns 0.92
subscribe 100 observers to publish_subject 212388.20 ns 16219.48 ns 49897.33 ns 0.33
100 on_next to 100 observers to publish_subject 35357.74 ns 17623.20 ns 32123.34 ns 0.55

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1296.27 ns 12.03 ns 11.12 ns 1.08
basic sample with immediate scheduler 1347.68 ns 5.86 ns 6.17 ns 0.95

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 995.34 ns 0.31 ns 0.31 ns 1.00

Error Handling Operators

name rxcpp rpp prev rpp ratio
create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe 2183.54 ns 1221.29 ns 1235.77 ns 0.99

ci-windows

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 578.04 ns 4.74 ns 4.01 ns 1.18
Subscribe empty callbacks to empty observable via pipe operator 592.42 ns 4.75 ns 4.01 ns 1.18

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 1181.25 ns 5.24 ns 4.62 ns 1.13
from array of 1 - create + subscribe + current_thread 1448.50 ns 15.74 ns 15.74 ns 1.00
concat_as_source of just(1 immediate) create + subscribe 3837.45 ns 172.20 ns 173.49 ns 0.99
defer from array of 1 - defer + create + subscribe + immediate 1218.57 ns 5.55 ns 4.93 ns 1.13
interval - interval + take(3) + subscribe + immediate 3773.77 ns 134.29 ns 133.47 ns 1.01
interval - interval + take(3) + subscribe + current_thread 3469.07 ns 52.20 ns 52.61 ns 0.99
from array of 1 - create + as_blocking + subscribe + new_thread 123462.50 ns 117190.00 ns 110733.33 ns 1.06
from array of 1000 - create + as_blocking + subscribe + new_thread 129633.33 ns 130577.78 ns 130025.00 ns 1.00
concat_as_source of just(1 immediate) and just(1,2 immediate)create + subscribe 5767.68 ns 204.18 ns 202.01 ns 1.01

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 1858.78 ns 12.87 ns 12.87 ns 1.00
immediate_just+filter(true)+subscribe 1359.53 ns 12.38 ns 11.75 ns 1.05
immediate_just(1,2)+skip(1)+subscribe 1802.68 ns 13.13 ns 13.12 ns 1.00
immediate_just(1,1,2)+distinct_until_changed()+subscribe 1421.22 ns 15.95 ns 15.77 ns 1.01
immediate_just(1,2)+first()+subscribe 2100.74 ns 12.97 ns 12.64 ns 1.03
immediate_just(1,2)+last()+subscribe 1841.84 ns 13.80 ns 14.13 ns 0.98
immediate_just+take_last(1)+subscribe 2063.81 ns 58.14 ns 63.56 ns 0.91

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 495.18 ns 6.48 ns 6.17 ns 1.05
current_thread scheduler create worker + schedule 665.01 ns 13.18 ns 13.17 ns 1.00
current_thread scheduler create worker + schedule + recursive schedule 1115.11 ns 103.47 ns 103.79 ns 1.00

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 1349.61 ns 12.30 ns 11.10 ns 1.11
immediate_just+scan(10, std::plus)+subscribe 1460.85 ns 21.59 ns 21.27 ns 1.01
immediate_just+flat_map(immediate_just(v*2))+subscribe 3578.44 ns 222.53 ns 211.09 ns 1.05
immediate_just+buffer(2)+subscribe 2685.08 ns 57.35 ns 58.09 ns 0.99
immediate_just+window(2)+subscribe + subscsribe inner 4147.98 ns 1345.68 ns 1235.98 ns 1.09

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 1703.70 ns 11.46 ns 11.41 ns 1.01
immediate_just+take_while(true)+subscribe 1361.96 ns 12.37 ns 11.74 ns 1.05

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 3268.66 ns 7.40 ns 7.09 ns 1.04

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 5510.65 ns 252.73 ns 241.41 ns 1.05
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 5625.15 ns 232.66 ns 221.83 ns 1.05
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 219.71 ns 227.00 ns 0.97
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 5533.16 ns 982.04 ns 974.93 ns 1.01
immediate_just(1) + zip(immediate_just(2)) + subscribe 3606.62 ns 542.69 ns 542.30 ns 1.00

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 37.54 ns 24.05 ns 27.44 ns 0.88
subscribe 100 observers to publish_subject 271725.00 ns 29592.31 ns 80550.00 ns 0.37
100 on_next to 100 observers to publish_subject 52113.64 ns 39213.79 ns 63850.00 ns 0.61

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1921.29 ns 57.72 ns 56.50 ns 1.02
basic sample with immediate scheduler 1926.27 ns 37.64 ns 36.40 ns 1.03

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 1585.28 ns 19.91 ns 19.97 ns 1.00

Error Handling Operators

name rxcpp rpp prev rpp ratio
create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe 1968.52 ns 342.38 ns 334.07 ns 1.02

@victimsnino victimsnino force-pushed the try_to_speedup_subjects branch from 47b2886 to edea0ba Compare June 3, 2024 20:13
@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented Jun 6, 2024

@victimsnino victimsnino marked this pull request as ready for review June 6, 2024 21:08
@victimsnino victimsnino merged commit 74361cd into v2 Jun 6, 2024
@victimsnino victimsnino deleted the try_to_speedup_subjects branch June 6, 2024 21:08
victimsnino added a commit that referenced this pull request Jun 7, 2024
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.

1 participant