多协程执行收集结果的技巧
多协程的好处 比如,此时有一个任务 我们手动加了耗时操作,我们使用正常的方式来进行获取。 这样下来运行的耗时是需要 2s 多一点的。 初级版本 我们接下来使用sync.WaitGroup + goroutine 来优化 这样,使用了协程 来处理之后,耗时变成了501.338458ms 再次优化,我们可以加上channel 这样也会得到以下结果 优雅版本 优雅

wxvirus2022年6月24日
大约 1 分钟
并发安全与锁

并发安全和锁

案例

package main

import (
	"fmt"
	"sync"
)

// 多个goroutine并发操作全局变量x

var (
	x  int64
	wg sync.WaitGroup
)

func add() {
	for i := 0; i < 5000; i++ {
		// 1. 拿到全局变量x
		// 2. 给这个值+1
		// 3. 加1后在赋值给全局变量x
		x++ // 对全局变量进行每次+1
	}
	wg.Done()
}

func main() {
	wg.Add(2)
	go add()
	go add()
	wg.Wait()
	fmt.Println(x) // 7180 5285 各种值
}


wxvirus2021年9月27日
大约 6 分钟