美文网首页
golang锁竞争性能

golang锁竞争性能

作者: NeverLee | 来源:发表于2018-04-01 22:32 被阅读0次

    闲来没事,便试着测试了下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百万

    相关文章

      网友评论

          本文标题:golang锁竞争性能

          本文链接:https://www.haomeiwen.com/subject/gqqzcftx.html