xacrimon / dashmap

Blazing fast concurrent HashMap for Rust.
MIT License
2.84k stars 140 forks source link

Non-Arc iterators / Interior iteration. #285

Open XAMPPRocky opened 8 months ago

XAMPPRocky commented 8 months ago

Hello 👋 I've been benchmarking https://github.com/googleforgames/quilkin and while benchmarking I noticed that we spend a significant amount of CPU time just allocating and dropping the Arc in GuardIter (~5–10%). Because we need to iterate over the map in every packet. In our case the use of the Arc is not really needed because we're immediately consuming the iterator.

I was wondering if there's any interest in providing support for iterators that don't use Arc, or providing a way to map/reduce that doesn't involve Arc? I think this would provide significant performance benefits for those who are trying to perform an operation over the whole map immediately over the current implementation.

Code

# DashMap<String, BTreeSet<SocketAddr>
map.iter().map(|entry| entry.value().len()).sum()

Flamegraph

Screenshot 2023-10-22 at 15 43 33
XAMPPRocky commented 8 months ago

I should note this is with a single entry in the map, it gets worse as the map gets larger.