Fork me on GitHub

版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | http://vearne.cc

前言

关于Golang中的锁的实现和源码早就文章阐述过了,这里我从实验的角度让大家看看对协程数量对任务执行速度,以及CPU开销的影响

运行环境

CPU: Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz 8核
内存:16G
GO version 1.10
image_1col83u4l20o4222km157c1jlu9.png-111.9kB

协程数量分别是1, 2, 5, 10, 100, 200下完成1000000000次计数所花
总时间
CPU消耗
CPU峰值

分析

观察图可以发现,
1) 协程数量是1的时候运行总时间反而最短,只耗时2.8秒,协程数量10时,运行总时间最长,耗时21.6秒
2) 协程数量是100时,CPU峰值最大,为530%,协程数量是1是,CPU峰值最小,不到100%

代码

package main

import (
    "fmt"
    "sync"
    "time"
)

type LockBox struct{
    sync.Mutex
    Value int
}

func deal(wpg *sync.WaitGroup, bp *LockBox, count int){
    for i:=0;i< count;i++{
        bp.Lock()
        bp.Value++
        bp.Unlock()
    }
    wpg.Done()
}

func main() {
    timeStart := time.Now()
    //workerCount := 1
    //workerCount := 2
    workerCount := 200
    taskCount := 1000000000

    var wg sync.WaitGroup
    var box LockBox

    for i:=0;i<workerCount;i++{
        wg.Add(1)
        go deal(&wg, &box, taskCount/workerCount)
    }

    wg.Wait()
    fmt.Println("cost", time.Since(timeStart))
}

如果我的文章对你有帮助,你可以给我打赏以促使我拿出更多的时间和精力来分享我的经验和思考总结。

微信支付码

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据