GoLang Channel与mutex的选择,性能差不多
来源:互联网 发布:红警3单位数据 编辑:程序博客网 时间:2024/06/04 14:58
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化,更推荐。
0 0
- GoLang Channel与mutex的选择,性能差不多
- golang-goroutine与channel:高效的channel
- golang-goruntime与channel:高效的channel
- golang-goroutine与channel:高效的channel
- golang 的channel
- golang的channel使用
- golang的channel剖析
- golang的Channel
- golang的Channel
- golang的Channel
- golang channel 的使用
- [Golang]互斥到底该谁做?channel还是Mutex
- Mutex与spin lock的性能对比
- Golang:有趣的 channel 应用
- Golang:有趣的 channel 应用
- golang控制channel的出入口
- GoLang channel 用法转的
- golang channel的使用技巧
- 应用dts在am335x上移植LCD(一)
- 同时启动多个 tomcat 服务
- 【OC语法】Foundation框架-NSObject
- iOS关于SQLite数据库的操作(使用第三方类库FMDB)
- Ubuntu14.04 搭建vsftp服务器
- GoLang Channel与mutex的选择,性能差不多
- egit提交代码到远程仓库
- simhash算法原理及实现
- 使用MyBatis的ScriptRunner执行sql文件
- 太阳系模型小项目(JAVA)
- SSH:Spring框架(简介)
- python装饰器decorator之计算函数运行时间的例子
- 实习整理(九)
- java记——继承,封装,对象