golang锁竞争性能

闲来没事,便试着测试了下golang的锁的性能。代码如下:

package main

import (
    "fmt"
    "os"
    "strconv"
    "sync"
    "time"
)

var lock sync.Mutex
var count = 1

func 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百万
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,752评论 25 709
  • 王熙凤和平儿在屋里打发时间 白描的手法 表现无聊的情绪 话说凤姐儿自贾琏送黛玉往扬州去后,心中实在无趣,每到晚间,...
    snowing227阅读 402评论 0 0
  • 《娱乐至死》通篇读完之后,感触最深的就是信息通过不同的媒介向人类传播之后,其本质发生巨大的改变,也日益影响着人们大...
    大超在路上阅读 576评论 0 0
  • 放弃比较的心,才能走好自己的路
    曾经相遇总胜过从未碰头阅读 217评论 0 0
  • /1/ 当你阅读时感受到痛苦,那都是真实的,当你阅读时感受到了美,那也都是真实的。 ...
    左耶阅读 1,163评论 2 7