GoLang Channel与mutex的选择,性能差不多
发布时间:2020-12-16 18:37:07 所属栏目:大数据 来源:网络整理
导读:go官方应该是更推荐使用chan 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 ]
go官方应该是更推荐使用chan 以下代码用于测试性能 — 不确保思路是正确的。 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 finishn",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 finishn",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)
}
输出结果:
mutex性能略好,但chan更go化,更推荐。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |