Fork me on GitHub

版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://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))
}

请我喝瓶饮料

微信支付码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注