Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
use try_send to replace send.await, unbounded channel should always b… (
bevyengine#7745) …e sendable, this improves performance # Objective - From prev experience, `.await` is not free, also I did a profiling a half year ago, bevy's multithread executor spend lots cycles on ArcWaker. ## Solution - this pr replace `sender.send().await` to `sender.try_send()` to cut some future/await cost. benchmarked on `empty system` ```bash ➜ critcmp send_base send_optimize group send_base send_optimize ----- --------- ------------- empty_systems/000_systems 1.01 2.8±0.03ns ? ?/sec 1.00 2.8±0.02ns ? ?/sec empty_systems/001_systems 1.00 5.9±0.21µs ? ?/sec 1.01 5.9±0.23µs ? ?/sec empty_systems/002_systems 1.03 6.4±0.26µs ? ?/sec 1.00 6.2±0.19µs ? ?/sec empty_systems/003_systems 1.01 6.5±0.17µs ? ?/sec 1.00 6.4±0.20µs ? ?/sec empty_systems/004_systems 1.03 7.0±0.24µs ? ?/sec 1.00 6.8±0.18µs ? ?/sec empty_systems/005_systems 1.04 7.4±0.35µs ? ?/sec 1.00 7.2±0.21µs ? ?/sec empty_systems/010_systems 1.00 9.0±0.28µs ? ?/sec 1.00 9.1±0.80µs ? ?/sec empty_systems/015_systems 1.01 10.9±0.36µs ? ?/sec 1.00 10.8±1.29µs ? ?/sec empty_systems/020_systems 1.12 12.7±0.67µs ? ?/sec 1.00 11.3±0.37µs ? ?/sec empty_systems/025_systems 1.12 14.6±0.39µs ? ?/sec 1.00 13.0±1.02µs ? ?/sec empty_systems/030_systems 1.12 16.2±0.39µs ? ?/sec 1.00 14.4±0.37µs ? ?/sec empty_systems/035_systems 1.19 18.2±0.97µs ? ?/sec 1.00 15.3±0.48µs ? ?/sec empty_systems/040_systems 1.12 20.6±0.58µs ? ?/sec 1.00 18.3±1.87µs ? ?/sec empty_systems/045_systems 1.18 22.7±0.57µs ? ?/sec 1.00 19.2±0.46µs ? ?/sec empty_systems/050_systems 1.03 21.9±0.92µs ? ?/sec 1.00 21.3±0.96µs ? ?/sec empty_systems/055_systems 1.13 25.7±1.00µs ? ?/sec 1.00 22.8±0.50µs ? ?/sec empty_systems/060_systems 1.35 30.0±2.57µs ? ?/sec 1.00 22.2±1.04µs ? ?/sec empty_systems/065_systems 1.28 31.7±0.76µs ? ?/sec 1.00 24.8±0.79µs ? ?/sec empty_systems/070_systems 1.33 36.8±10.37µs ? ?/sec 1.00 27.6±0.55µs ? ?/sec empty_systems/075_systems 1.25 38.0±0.83µs ? ?/sec 1.00 30.3±0.63µs ? ?/sec empty_systems/080_systems 1.33 41.7±1.22µs ? ?/sec 1.00 31.4±1.01µs ? ?/sec empty_systems/085_systems 1.27 45.6±2.54µs ? ?/sec 1.00 35.8±4.06µs ? ?/sec empty_systems/090_systems 1.29 48.3±5.33µs ? ?/sec 1.00 37.6±5.32µs ? ?/sec empty_systems/095_systems 1.16 45.7±0.97µs ? ?/sec 1.00 39.4±2.75µs ? ?/sec empty_systems/100_systems 1.14 49.5±4.26µs ? ?/sec 1.00 43.5±1.06µs ? ?/sec ```
- Loading branch information