bevy/crates
James Liu e34fb68677
refactor: Extract parallel queue abstraction (#7348)
# Objective
There's a repeating pattern of `ThreadLocal<Cell<Vec<T>>>` which is very
useful for low overhead, low contention multithreaded queues that have
cropped up in a few places in the engine. This pattern is surprisingly
useful when building deferred mutation across multiple threads, as noted
by it's use in `ParallelCommands`.

However, `ThreadLocal<Cell<Vec<T>>>` is not only a mouthful, it's also
hard to ensure the thread-local queue is replaced after it's been
temporarily removed from the `Cell`.

## Solution
Wrap the pattern into `bevy_utils::Parallel<T>` which codifies the
entire pattern and ensures the user follows the contract. Instead of
fetching indivdual cells, removing the value, mutating it, and replacing
it, `Parallel::get` returns a `ParRef<'a, T>` which contains the
temporarily removed value and a reference back to the cell, and will
write the mutated value back to the cell upon being dropped.

I would like to use this to simplify the remaining part of #4899 that
has not been adopted/merged.

---

## Changelog
TODO

---------

Co-authored-by: Joseph <21144246+JoJoJet@users.noreply.github.com>
2024-02-19 16:31:15 +00:00
..
bevy_a11y Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_animation Rework animation to be done in two phases. (#11707) 2024-02-19 14:59:54 +00:00
bevy_app Use is method instead of downcast_ref::<T>().is_some() in App::is_plugin_added (#11949) 2024-02-18 22:17:17 +00:00
bevy_asset Qualify embedded_asset expansion with $crate:: (#11961) 2024-02-18 21:52:32 +00:00
bevy_audio Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_core Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_core_pipeline rename Camera3dBundle's 'dither' field to 'deband_dither' to align with Camera2dBundle (#11939) 2024-02-19 14:01:35 +00:00
bevy_derive Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_diagnostic Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_dylib Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_dynamic_plugin Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_ecs refactor: Extract parallel queue abstraction (#7348) 2024-02-19 16:31:15 +00:00
bevy_ecs_compile_fail_tests Deprecated Various Component Methods from Query and QueryState (#9920) 2024-02-04 01:01:59 +00:00
bevy_encase_derive Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_gilrs Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_gizmos Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_gltf Rework animation to be done in two phases. (#11707) 2024-02-19 14:59:54 +00:00
bevy_hierarchy Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_input Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_internal Rework animation to be done in two phases. (#11707) 2024-02-19 14:59:54 +00:00
bevy_log Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_macro_utils Update to toml_edit 0.22 (#11973) 2024-02-19 08:11:29 +00:00
bevy_macros_compile_fail_tests Standardize toml format with taplo (#10594) 2023-11-21 01:04:14 +00:00
bevy_math Add single-f32 constructors for a few (very few) primitives (#11934) 2024-02-18 07:43:45 +00:00
bevy_mikktspace Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_pbr Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_ptr Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_reflect Rework animation to be done in two phases. (#11707) 2024-02-19 14:59:54 +00:00
bevy_reflect_compile_fail_tests bevy_reflect_derive: Clean up attribute logic (#11777) 2024-02-12 15:16:27 +00:00
bevy_render refactor: Extract parallel queue abstraction (#7348) 2024-02-19 16:31:15 +00:00
bevy_scene Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_sprite Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_tasks Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_text Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_time Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_transform Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_ui Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_utils refactor: Extract parallel queue abstraction (#7348) 2024-02-19 16:31:15 +00:00
bevy_window typo (#11955) 2024-02-18 20:16:15 +00:00
bevy_winit Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00