golang锁竞争性能
【golang锁竞争性能】闲来没事,便试着测试了下golang的锁的性能。代码如下:
package mainimport (
"fmt"
"os"
"strconv"
"sync"
"time"
)var lock sync.Mutex
var count = 1func work() {
for {
lock.Lock()
count++
lock.Unlock()
}
}func main() {
nthread := 1
if len(os.Args) > 1 {
nthread, _ = strconv.Atoi(os.Args[1])
}for i := 0;
i < nthread;
i++ {
go work()
}
old := 0
last := time.Now()
for {
time.Sleep(time.Second)
lock.Lock()
k := count
lock.Unlock()
now := time.Now()
fmt.Println(int(float64(k-old) / (float64(now.UnixNano()-last.UnixNano()) / 1e9)))
old = k
last = now
}
}
测试结果:
竞争的协程数 | 每秒总的lock次数 |
---|---|
1 | 5千万 |
2 | 2.8千万 |
4 | 9百万 |
10 | 6百万 |
100 | 5百万 |
1000 | 5百万 |
10000 | 5百万 |
100000 | 5百万 |
1000000 | 5百万 |
推荐阅读
- 边走边看——锁
- 《人性的枷锁》
- 三门问题(蒙提霍尔悖论)分析与Golang模拟
- 别让习惯成为可怕的枷锁
- stm32|基于STM32和freeRTOS智能门锁设计方案
- 大红笔记之心理学课13
- Java并发编程|Java并发编程 - 深入剖析ReentrantLock之非公平锁加锁流程(第1篇)
- 偏向锁、轻量级锁、重量级锁的升级以及区别
- 找工作受挫,为什么我们都会说自己没有核心竞争力()
- 解锁新技能