goruntine+channel 案例练习一

本文介绍了如何使用Go语言的协程和通道来实现数字流水线,8个协程同时计算1到2000的累加和,并将结果存储在resChan中。展示了并发编程在处理大量数据时的有效利用。
package main
import (
	"fmt"
)
var (
	numChan = make(chan int,10)
	resChan = make(chan map[int]int,8)
	exitChan = make(chan bool,8)
)


func main(){
	//1 协程  存放数字
	go func(){
		for i:=1;i<=2000;i++{
			numChan<-i
		}
		close(numChan)
	}()
	// 8 协程 取			计算1+...+n的值				存到另一个管道 resChan 
	for i:=0;i<8;i++{
		go func(){
			for;;{
				
				n= <-numChan
				// 该协程取完了
				if len(numChan)== 0{
					break
				}

				// 计算 n连加 = sum
				sum:=0
				for j:=0;j<n;j++{
					sum+=n
				}

				// 存到另一个管道 resChan 
				resSlice := make(map[int]int)
				resSlice[n] = sum
				resChan<-resSlice
			}
			exitChan<-true
		}()
	}


	go func(){
		for;;{
			if len(exitChan) == 8{
				close(resChan)
				// close(exitChan) //可关可不关
				break
			}
		}
	}()
	
	// 遍历 resChen 打印
	for v :=range resChan{
		for index,value:=range v{
			fmt.Printf("res[%v] = %v\n",index,value)
		} 
	}

}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值