dashmap icon indicating copy to clipboard operation
dashmap copied to clipboard

Non-Arc iterators / Interior iteration.

Open XAMPPRocky opened this issue 2 years ago • 1 comments

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 avatar Oct 22 '23 13:10 XAMPPRocky

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

XAMPPRocky avatar Oct 23 '23 18:10 XAMPPRocky