From ace7ce1025402a9a47f70e72ac60a5932b22199f Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Thu, 20 Jul 2017 08:16:36 -0700 Subject: sync: update Map documentation with usage rule of thumb MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As per bcmills’s lightning talk at GopherCon 2017: https://github.com/gophercon/2017-talks/tree/master/lightningtalks/BryanCMills-AnOverviewOfSyncMap Change-Id: I12dd0daa608af175d110298780f32c6dc5e1e0a0 Reviewed-on: https://go-review.googlesource.com/50310 Reviewed-by: Bryan Mills --- src/sync/map.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/sync/map.go b/src/sync/map.go index 1238368d38..c3c2d1cc86 100644 --- a/src/sync/map.go +++ b/src/sync/map.go @@ -12,6 +12,15 @@ import ( // Map is a concurrent map with amortized-constant-time loads, stores, and deletes. // It is safe for multiple goroutines to call a Map's methods concurrently. // +// Map is designed to reduce cache contention in the Go standard library. +// It is optimized for use in concurrent loops with keys that are stable +// over time, and either few steady-state stores, or stores localized to +// one goroutine per key. +// +// For use cases that do not share these attributes, it will likely have +// comparable or worse performance and worse type safety than an ordinary +// map paired with a read-write mutex. +// // The zero Map is valid and empty. // // A Map must not be copied after first use. -- cgit v1.2.3-54-g00ecf