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

请我喝瓶饮料

微信支付码