mirror of
https://github.com/bevyengine/bevy
synced 2024-11-23 05:03:47 +00:00
use try_send to replace send.await, unbounded channel should always b… (#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 ```
This commit is contained in:
parent
2344b943a2
commit
de10dce10d
1 changed files with 3 additions and 6 deletions
|
@ -451,8 +451,7 @@ impl MultiThreadedExecutor {
|
||||||
sender.close();
|
sender.close();
|
||||||
} else {
|
} else {
|
||||||
sender
|
sender
|
||||||
.send(system_index)
|
.try_send(system_index)
|
||||||
.await
|
|
||||||
.unwrap_or_else(|error| unreachable!("{}", error));
|
.unwrap_or_else(|error| unreachable!("{}", error));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -508,8 +507,7 @@ impl MultiThreadedExecutor {
|
||||||
sender.close();
|
sender.close();
|
||||||
} else {
|
} else {
|
||||||
sender
|
sender
|
||||||
.send(system_index)
|
.try_send(system_index)
|
||||||
.await
|
|
||||||
.unwrap_or_else(|error| unreachable!("{}", error));
|
.unwrap_or_else(|error| unreachable!("{}", error));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -532,8 +530,7 @@ impl MultiThreadedExecutor {
|
||||||
sender.close();
|
sender.close();
|
||||||
} else {
|
} else {
|
||||||
sender
|
sender
|
||||||
.send(system_index)
|
.try_send(system_index)
|
||||||
.await
|
|
||||||
.unwrap_or_else(|error| unreachable!("{}", error));
|
.unwrap_or_else(|error| unreachable!("{}", error));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue