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日内与变化吧联系。
- 赞助本站
- 微信扫一扫
-
- 加入Q群
- QQ扫一扫
-
评论