download:Node.js工程师养成计划完整无密
经过实例深化了解sync.Map的工作原理
一. 原生map的“先天缺乏”
关于曾经初始化了的原生**map**,我们能够纵情地对其停止并发读:
// github.com/bigwhite/experiments/inside-syncmap/concurrent_builtin_map_read.go
package main
import (
"fmt"
"math/rand"
"sync"
)
func main() {
var wg sync.WaitGroup
var m = make(map[int]int, 100)
for i := 0; i < 100; i++ {
m[i] = i
}
wg.Add(10)
for i := 0; i < 10; i++ {
// 并发读
go func(i int) {
for j := 0; j < 100; j++ {
n := rand.Intn(100)
fmt.Printf("goroutine[%d] read m[%d]: %d\n", i, n, m[n])
}
wg.Done()
}(i)
}
wg.Wait()
}
复制代码