dashmap
dashmap copied to clipboard
Non-Arc iterators / Interior iteration.
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
I should note this is with a single entry in the map, it gets worse as the map gets larger.