Go并发使用channel还是mutex更快
发布于 2020-06-01 · 本文总共 473 字 · 阅读大约需要
2 分钟
1. 上代码
import "sync"
var lock sync.Mutex
func RunWithMutex() {
lock.Lock()
Woker()
lock.Unlock()
}
var ch = make(chan int, 1)
func RunWithChan() {
ch <- 1
Woker()
<-ch
}
func Woker() {
}
2. Benchmark测试
package __channel
import "testing"
func BenchmarkRunWithChan(b *testing.B) {
for i := 0; i < b.N; i++ {
RunWithChan()
}
}
// pkg: channel
// 28773352 41.3 ns/op
// PASS
func BenchmarkRunWithMutex(b *testing.B) {
for i := 0; i < b.N; i++ {
RunWithMutex()
}
}
// pkg: channel
// 106226368 10.3 ns/op
// PASS
结论:看来还是mutex加锁更快,不过chan更go