go使用协程计算1-100万和

方式一 channel方式

func sum(tar []int, channel chan int) int {
	result := 0
	for _, i := range tar {
		result += i
	}
	channel <- result
	return result

}

func main() {

	bT := time.Now() // 开始时间

	var (
		sign   []int
		double []int
	)
	resultChannel := make(chan int)

	for i := 1; i <= 10000; i++ {
		if i%2 == 0 {
			double = append(double, i)
		} else {
			sign = append(sign, i)
		}
		continue
	}
	go sum(sign, resultChannel)
	go sum(double, resultChannel)

	signRes, doubleRes := <-resultChannel, <-resultChannel
	log.Print("结果", signRes, doubleRes)
	log.Print("结果之和", signRes+doubleRes)
	//计算耗时
	eT := time.Since(bT)
	log.Print("耗时", eT)

}


=====控制台输出
2023/03/30 12:14:09 结果25005000 25000000
2023/03/30 12:14:09 结果之和50005000
2023/03/30 12:14:09 耗时9.2297ms

方式二 等待组


func main() {
	bT := time.Now() // 开始时间

	var (
		sign      []int
		double    []int
		wg        sync.WaitGroup
		signRes   int
		doubleRes int
	)

	for i := 1; i <= 10000; i++ {
		if i%2 == 0 {
			double = append(double, i)
		} else {
			sign = append(sign, i)
		}
		continue
	}

	wg.Add(1)
	go func(tar []int) {
		result := 0
		for _, i := range tar {
			result += i
		}
		signRes = result
		wg.Done()
	}(sign)

	wg.Add(1)

	go func(tar []int) {
		result := 0
		for _, i := range tar {
			result += i
		}
		doubleRes = result
		wg.Done()
	}(double)
	wg.Wait()

	//signRes, doubleRes
	log.Print("结果", signRes, doubleRes)
	log.Print("结果之和", signRes+doubleRes)
	//计算耗时
	eT := time.Since(bT)
	// 9.9265ms
	log.Print("耗时", eT)

}



======控制台输出
2023/03/30 12:14:58 结果25000000 25005000
2023/03/30 12:14:58 结果之和50005000
2023/03/30 12:14:58 耗时8.547ms

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值