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




本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢。
声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:邱文奇(qiuwenqi)的博客;
内容系本人学习、研究和总结,如有雷同,实属荣幸!
阅读次数:

文章评论

comments powered by Disqus


章节列表