GoLang Channel与mutex的选择,性能差不多
2015-11-17 17:37
453 查看
go官方应该是更推荐使用chan
https://github.com/golang/go/wiki/MutexOrChannel
以下代码用于测试性能 — 不确保思路是正确的。
输出结果:
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化,更推荐。
https://github.com/golang/go/wiki/MutexOrChannel
以下代码用于测试性能 — 不确保思路是正确的。
package main import ( "fmt" "sync" "time" ) type Op struct { key int val int } var lock sync.Mutex var m1 map[int]int var m2 map[int]int var max int = 50000 func 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 Op func 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化,更推荐。
相关文章推荐
- Go 语言 Channel 实现原理精要
- Go语言将支持Android
- 选定虚拟主机 性能凸显优势
- 修改一行代码提升 Postgres 性能 100 倍
- 推荐Sql server一些常见性能问题的解决方法
- SQL Server误区30日谈 第9天 数据库文件收缩不会影响性能
- 和表值函数连接引发的性能问题分析
- SQLServer 2000 升级到 SQLServer 2008 性能之需要注意的地方之一
- 数据库性能优化三:程序操作优化提升性能
- VBS中的字符串连接的性能问题
- mysql 性能的检查和调优方法
- 数据库性能优化二:数据库表优化提升性能
- 如何用分表存储来提高性能 推荐
- ASP中使用FileSystemObject时提高性能的方法
- 如何改进javascript代码的性能
- JavaScript脚本性能优化注意事项
- JQuery Tips(4) 一些关于提高JQuery性能的Tips
- jQuery性能优化28条建议你值得借鉴
- 十个迅速提升JQuery性能让你的JQuery跑得更快
- jquery选择器的选择使用及性能介绍