puzpuzpuz / xsync

Concurrent data structures for Go

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Copy on write map

jorgebay opened this issue · comments

(First of all, cool project @puzpuzpuz! A faster and typed concurrent map like MapOf is something that should be part of go's stdlib)

Copy-on-write maps are useful for read-mostly performance-critical areas, as LoadOrCompute() calls only cost an atomic load for reads. Additionally, these semantics provide a snapshot view that allow fast and predictable iteration.

Typical use cases for these structures are config settings and topology management.

I can contribute it, if you think it belongs in this project.

Hi Jorge,

I'm all for a contribution. COW data structures are on the radar and I have a COW list issue open (#27), but there wasn't enough interest for it, unfortunately. In MapOf, LoadOrCompute()'s read path assumes two atomic loads in the best case. So the end COW map performance might be close to MapOf, but it's certainly worth exploring.

I agree that the improvement on the performance side for read-mostly cases is minor.

I think the main benefit is related to the consistent snapshot semantics: iterate a point-in-time structure, e.g., if you have a map with [a, b, c] keys that get mutated into [a, b, d, e] the caller will never get [a, b, d].

I think the main benefit is related to the consistent snapshot semantics

Yes, that's not possible with non-COW or single mutex protected data structures.