
go官方应该是更推荐使用chan
https://github.com/golang/go/wiki/MutexOrChannel
以下代码用于测试性能 — 不确保思路是正确的。
package mainimport ( "fmt" "sync" "time")type Op struct { key int val int}var lock sync.Mutexvar m1 map[int]intvar m2 map[int]intvar max int = 50000func update_map_by_mutex(i int) { lock.Lock() m1[i] = i if len(m1) == max { fmt.Printf("%s mutex finish\n",time.Now()) } lock.Unlock()}var ch chan Opfunc update_map_by_chan(i int) { ch <- Op{key: i,val: i}}func wait_for_chan(m map[int]int) { for { select { case op := <-ch: m[op.key] = op.val if len(m2) == max { fmt.Printf("%s chan finish\n",time.Now()) return } } }}func main() { m1 = make(map[int]int,max) m2 = make(map[int]int,max) ch = make(chan Op) go wait_for_chan(m2) for i := 0; i < max; i++ { go update_map_by_chan(i) go update_map_by_mutex(i) } time.Sleep(time.Second * 1)}
输出结果:
2015-11-17 17:08:18.06992 +0800 CST mutex finish
2015-11-17 17:08:18.0709215 +0800 CST chan finish
mutex性能略好,但chan更go化,更推荐。
总结以上是内存溢出为你收集整理的GoLang Channel与mutex的选择,性能差不多全部内容,希望文章能够帮你解决GoLang Channel与mutex的选择,性能差不多所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)