]> Cypherpunks repositories - gostls13.git/commit
sync: add new Map method LoadAndDelete
authorChangkun Ou <hi@changkun.us>
Fri, 8 Nov 2019 10:23:58 +0000 (11:23 +0100)
committerBryan C. Mills <bcmills@google.com>
Tue, 25 Feb 2020 14:31:55 +0000 (14:31 +0000)
commit2e8dbae85ce88d02f651e53338984288057f14cb
tree18c7cb61088e0ea0845484f895e08cb1cbf71d51
parent450d0b2f30e820f402a638799de0b886c1da8dbe
sync: add new Map method LoadAndDelete

This CL implements a LoadAndDelete method in sync.Map. Benchmark:

name                                              time/op
LoadAndDeleteBalanced/*sync_test.RWMutexMap-12    98.8ns ± 1%
LoadAndDeleteBalanced/*sync.Map-12                10.3ns ±11%
LoadAndDeleteUnique/*sync_test.RWMutexMap-12      99.2ns ± 2%
LoadAndDeleteUnique/*sync.Map-12                  6.63ns ±10%
LoadAndDeleteCollision/*sync_test.DeepCopyMap-12   140ns ± 0%
LoadAndDeleteCollision/*sync_test.RWMutexMap-12   75.2ns ± 2%
LoadAndDeleteCollision/*sync.Map-12               5.21ns ± 5%

In addition, Delete is bounded and more efficient if many collisions:

DeleteCollision/*sync_test.DeepCopyMap-12   120ns ± 2%   125ns ± 1%   +3.80%  (p=0.000 n=10+9)
DeleteCollision/*sync_test.RWMutexMap-12   73.5ns ± 3%  79.5ns ± 1%   +8.03%  (p=0.000 n=10+9)
DeleteCollision/*sync.Map-12               97.8ns ± 3%   5.9ns ± 4%  -94.00%  (p=0.000 n=10+10)

Fixes #33762

Change-Id: Ic8469a7861d27ab0edeface0078aad8af9b26c2f
Reviewed-on: https://go-review.googlesource.com/c/go/+/205899
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
api/next.txt
doc/go1.15.html
src/sync/map.go
src/sync/map_bench_test.go
src/sync/map_reference_test.go
src/sync/map_test.go