Node.js工程师养成计划完整无密

417 阅读1分钟

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()

}

复制代码