-
Notifications
You must be signed in to change notification settings - Fork 17.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
sync: reduce (*Map).Load penalty for Stores with new keys #21032
Comments
For anyone following this issue, Go 1.24 has a new implementation of That older CL 573956 includes the comment:
which can be contrasted with this (from the opening comment of this issue here):
If people are curious about performance improvements, it could be helpful to test it out via benchmarks for their use cases, which is relatively easy via
Some additional comments by @mknyszek in #21035 (comment) and #21035 (comment). |
Thanks @thepudds. The new map's |
In the Go 1.9 implementation of
sync.Map
, storing any new key in the map causesLoad
calls on all new keys to acquire a mutex until enough misses have occurred to promote the read-write map again.That's probably fine for append-only maps (such as the
sync.Map
uses in the standard library), because it goes away in the steady state. However, it's problematic for use in caches, where there may be frequentLoad
andStore
calls for keys that miss the cache.I suspect we could substantially reduce the
Load
penalty by using a Bloom or HyperLogLog filter instead of a simple boolean to store the set of new keys: aLoad
that misses in the read-only map would still have more cache misses due to writes to the filter, but it would no longer blockStore
calls or contend with otherLoad
s.The text was updated successfully, but these errors were encountered: