Go语言锁性能比较

幸运草 2020年4月15日21:45:08前端框架评论阅读模式

Go语言锁性能比较

性能比较

一、测试互斥锁性能,20秒程序执行次数。

package main

import (
    "fmt"
    "math/rand"
    "sync"
    "sync/atomic"
    "time"
)

var MLock sync.Mutex

func main() {
    m := make(map[int]int, 5)
    var count int32
    m[1] = 10
    m[2] = 10
    m[3] = 10
    m[4] = 10
    m[5] = 10
    for i := 0; i < 2; i++ {
        go func() {
            MLock.Lock()
            m[5] = rand.Intn(100)
            time.Sleep(10 * time.Microsecond)
            MLock.Unlock()

        }()
    }
    for i := 0; i < 100; i++ {
        go func() {
            for {
                MLock.Lock()
                time.Sleep(time.Millisecond)
                _ = m[5]
                MLock.Unlock()
                atomic.AddInt32(&count, 1)
            }
        }()
    }
    time.Sleep(time.Second * 20)
    fmt.Println(atomic.LoadInt32(&count))
}

二、测试读写锁性能,20秒程序执行次数。

package main

import (
    "fmt"
    "math/rand"
    "sync"
    "sync/atomic"
    "time"
)

var rwLock sync.RWMutex

func main() {
    m := make(map[int]int, 5)
    var count int32
    m[1] = 10
    m[2] = 10
    m[3] = 10
    m[4] = 10
    m[5] = 10
    for i := 0; i < 2; i++ {
        go func() {
            rwLock.Lock()
            m[5] = rand.Intn(100)
            time.Sleep(10 * time.Microsecond)
            rwLock.Unlock()
        }()
    }
    for i := 0; i < 100; i++ {
        go func() {
            for {
                rwLock.RLock()
                time.Sleep(time.Millisecond)
                _ = m[5]
                rwLock.RUnlock()
                atomic.AddInt32(&count, 1)
            }
        }()
    }
    time.Sleep(time.Second * 20)
    fmt.Println(atomic.LoadInt32(&count))
}

特别声明:以上文章内容仅代表作者本人观点,不代表变化吧观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。

  • 赞助本站
  • 微信扫一扫
  • weinxin
  • 加入Q群
  • QQ扫一扫
  • weinxin
幸运草
Go语言接口规则 前端框架

Go语言接口规则

Go语言接口规则 接口是一个或多个方法签名的集合。任何类型的方法集中只要拥有该接口对应的全部方法签名。就表示它 "实现" 了该接口,无须在该类型上显式声明实现了哪个接口。对应方法,是指有相同名称、参数...
Go语言中处理 HTTP 服务器 前端框架

Go语言中处理 HTTP 服务器

1 概述 包 net/http 提供了HTTP服务器端和客户端的实现。本文说明关于服务器端的部分。 快速开始: package main import (   "log"   "net/http" )...

发表评论