GO mutex 与 atomic 性能对比
所属分类 go
浏览量 823
并发递增计数
count2.go 使用互斥锁 Mutex 循环外部加锁
count3.go 使用原子操作 atomic
count4.go 使用互斥锁 Mutex 循环内部加锁
count2.go
func countadd(){
defer wg.Done()
lock.Lock()
defer lock.Unlock()
for i := 0; i < NUM; i++ {
count++;
}
}
count3.go
func countadd(){
defer wg.Done()
for i := 0; i < NUM; i++ {
atomic.AddInt32(&count,1)
}
}
count4.go
func countadd(){
defer wg.Done()
// lock.Lock()
// defer lock.Unlock()
// 注意 lock 在循环里面 !!!
//
for i := 0; i < NUM; i++ {
lock.Lock()
count++;
lock.Unlock()
}
}
go run count2.go
100000000 217.503133ms
go run count3.go
100000000 3.312771846s
go run count4.go
100000000 16.262437483s
注意count2 count4 的区别 ,加锁 循环内部 vs 循环外部
mutex 与 atomic pk
应该在循环内部加锁
完整代码
https://gitee.com/dyyx/hellocode/blob/master/web/tech/go/demo/count2.go
https://gitee.com/dyyx/hellocode/blob/master/web/tech/go/demo/count3.go
https://gitee.com/dyyx/hellocode/blob/master/web/tech/go/demo/count4.go
Go语言atomic原子操作
GO 并发递增计数实例
上一篇
下一篇
GO 并发递增计数实例
Go并发构建模块
Go语言atomic原子操作
cannot find GOROOT directory
自定义springboot starter
springboot禁用特定的自动配置类