美文网首页
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锁竞争性能

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

  • 锁的优化及注意事项(一)

    一、提高锁性能的几点建议 锁的竞争会导致程序整体性能的下降,如何降低锁竞争带来的副作用是我们必须考虑的。下面提出几...

  • ReadWriteLock和CountDownLatch

    ReadWriteLock读写锁 读写分离锁可以有效帮助减少锁竞争以提高系统性能。比如线程A1、A2、A3进行写操...

  • 轻松检测Golang并发的数据竞争

    Golang中我们使用Channel或者sync.Mutex等锁保护数据,有没有一种机制可以检测代码中的数据竞争呢...

  • 有助于提高锁性能的几点建议

    1.减少锁持有的时间 对于使用锁进行并发控制的应用程序而言,在锁的竞争过程中,单个线程对锁的持有时间与系统性能有着...

  • Java 锁

    1:锁存在的问题1)在多线程竞争锁的情况下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。而且在上...

  • CAS原理分析

    锁机制存在问题 1.在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。 2...

  • Golang 锁的相关知识

    Golang锁分类:互斥锁(Mutex)、读写锁(RWMutex)。 互斥锁 在编写代码中引入了对象互斥锁的概念,...

  • Java多线程笔记(二):锁与闭锁工具类

    为了更好地支持并发程序,“锁”是较为常用的同步方法之一。在高并发环境下,激励的锁竞争会导致程序的性能下降。所以我们...

  • 锁分析(上)

    锁性能分析 iPhone 12真机测试,锁的性能数据对比图 性能从高到低排序:OSSpinLock(自旋锁)>os...

网友评论

      本文标题:golang锁竞争性能

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