go语言如何解决高并发计数问题(关于go语言中的协程相关知识点总结)
go语言如何解决高并发计数问题(关于go语言中的协程相关知识点总结)
2024-11-22 02:08:20  作者:不要抱怨  网址:https://m.xinb2b.cn/know/joy265172.html

接上一篇关于go语言中的协程相关知识点总结(一)继续分享 关于go协程之间进行相互通信的机制的知识点,我来为大家科普一下关于go语言如何解决高并发计数问题?以下内容希望对你有帮助!


go语言如何解决高并发计数问题

接上一篇关于go语言中的协程相关知识点总结(一)继续分享 关于go协程之间进行相互通信的机制的知识点

关于Channel(通道)

通道是go提供的一种通信机制,允许协程间进行数据传输,通道是需要指定类型的,是需要使用chan关键字声明的,是可以用close()方法进行关闭通道 的

关于通道的写入与读取

注意看代码里的注释!!!!

package mainimport ("fmt""time")func writeToChan(c chan int,x int) {fmt.Println("写之前",x)//向通道里写数据c<-x close(c)//下面的打印,会在读数据之后执行,如果不读,则一直阻塞了,等1s后,程序结束也不会打印了!fmt.Println("写之后",x)}func main() {c := make(chan int)//向通道里写值go writeToChan(c,10)time.Sleep(1*time.Second)//fmt.Println("读数据",<-c)time.Sleep(1*time.Second) v,ok:=<-c //可以通过ok判读通道是否关闭 if ok{ fmt.Println("通道开着呢") }else{ fmt.Println("通道关闭了") }}

通道作为函数参数传递

在当函数参数时,可以指定通道是只读通道或者是只写通道

//声明f1中能通道c只能是只写通道,并不能从当前通道里读取数据func f1(c chan<- int,x int ) {}//声明f2中能通道c只能是只读通道,并不能从当前通道里写数据func f2(c <-chan int,x int ) {}

来个比较综合点的例子

利用channel(通道)来模拟一下管道!!!

需求:计算所有随机数的和,如果随机数有重复的,则停止计算

package mainimport ("fmt""math/rand""os""strconv""time")//定义一个标志位var closea=falsevar data=make(map[int]bool)//随机数函数func random(min,max int) int {return rand.Intn(max-min) min}//把随机数写入通道func one(min,max int ,out chan<- int){for{//如果为真,则关闭通道if closea{close(out)return}//生成的随机数写入通道中out<-random(min,max)}}//从通道里取值,判断值在不在map中,如果不在加入新的通道中,如果在map中,则关闭one中的通道func two(out chan<- int,in <-chan int) {//从in通道里读取数据,并判断,如果有这个int值存在,则改变标志位,关闭out通道for x := range in {fmt.Println("x",x," ")//判断这个值在不在map中,如果在,则改标志位,如果不在,则添加到这个map中,并把这个值,发送到一个out通道中_,ok :=data[x]if ok{closea=true}else{data[x]=trueout<-x}}fmt.Println()//写完数据关闭通道close(out)}//从通道里取数据,并计算结果func three(in <-chan int) {var sum intfor x2:= range in {sum=sum x2}fmt.Println("随机数的和是",sum)}func main() {args :=os.Argsif len(args)==1{fmt.Println("参数缺失")os.Exit(1)}n1,_:=strconv.Atoi(args[1])n2,_:=strconv.Atoi(args[2])if n1>n2{fmt.Println("最小值与最大值位置不对")return}rand.Seed(time.Now().Unix())//注意在声明的时候,不要声明带方向的通道,要不无法使用a :=make(chan int)b :=make(chan int)go one(n1,n2,a)go two(b,a) //最后这个不协程,主要是为了阻塞主函数完成three(b)}

  • 想离开你的人从来不缺借口(想离开的人从来不缺借口)
  • 2024-11-22想离开的人从来不缺借口一生之中,有太多的人在我们身边经过不同的是,有人与我们相伴的时间久一些,有些人只是匆匆一面,便走了自己的路每个人,都有自己的人生之路,我们都像是一个终身跋涉的香客,去往一个自己内心的殿堂这一路上,会相。
  • 日本水果西瓜价格(韩国水果价格上涨)
  • 2024-11-22韩国水果价格上涨有报道称,高通胀、严重春旱、劳动力短缺等问题正在冲击着韩国的水果价格其中,随着夏季气温的升高,韩国水果界的“奢侈品”——西瓜的价格正以两位数的速度飙升红星新闻记者观察到,据韩国最大门户网站“NAVER。
  • 冷兵器大全100种图文(几种很奇特的冷兵器)
  • 2024-11-22几种很奇特的冷兵器1.哥萨克骑兵刀,握把很短,刀身窄长,有一点弯度,中间位置是凹进去的,有很好的放血作用该刀不仅有很好的砍杀能力,还有很好的刺杀能力,被它给刺中了,会让人流血不止,不及时救治的话,就会让人因失血过多而死。
  • 世界杯足球 基本知识(一些关于世界杯和足球的小知识)
  • 2024-11-22一些关于世界杯和足球的小知识近期,斥资2200多亿美元“壕无人性”的卡塔尔世界杯正式拉开帷幕,各大社交媒体纷纷追踪报道这场世界级赛事随着比赛的推进,与此同时频频占领热搜头版高地的是土豪家有意无意(有没有一种可能,这就是日常,人家。
  • 洒水车刚洒过的路面为什么很热(为何不见洒水车)
  • 2024-11-22为何不见洒水车有没有发现一个很奇怪的现象?冬天的时候天气寒冷,路面结冰,洒水车却不停地工作到了夏天的时候,温度高,酷热难耐本来想让洒水车降降温,结果马路上却很少看见洒水车所以有网友在网上来质疑,说洒水车是不是骗局呀。
  • 结构找坡是什么意思(结构找坡的解释)
  • 2024-11-22结构找坡的解释结构找坡又叫搁置坡度,是将屋面板搁置在顶部倾斜的梁上或墙上形成屋面排水坡度的方法结构找坡屋顶的坡度是由结构构件的形状或者其支承情况形成的就是利用混凝土建筑时直接形成坡结构找坡不需要再在屋顶上设置找坡层。
  • 老蒋高能剪辑(好期待老蒋专业户)
  • 2024-11-22好期待老蒋专业户洪江区新闻网讯(记者林振林)日前,《一代洪商》剧组在洪江古商城一甲巷及周边古巷,拍摄了积善行东家罗积善为孙子摆满月酒的场景300名演员身着民国时期服饰,共赴盛宴,再现了洪江古商城当年“烟火万家”商业巨。
  • 菠萝对身体的好处(菠萝到底有什么好处)
  • 2024-11-22菠萝到底有什么好处大家好我是健康池,一个喜欢生物健康的头条新手,我会为大家提供有关生物健康方面的浅解内容的,希望大家多多支持!今天咱们来部分地聊聊菠萝这个季节性水果一:首先还是要简答介绍一下菠萝这个常见水果:菠萝(学名。
  • 蓝猫和小猫咪的故事(猫故事4再见吧我的猫不让我再等你了)
  • 2024-11-22猫故事4再见吧我的猫不让我再等你了第四期嘉宾豆豆(右)我的基友豆豆是四岁大的奶牛,他最近发现自己的主人‘动力·火车’居然是个抖M李察德:你在家排第几?豆豆:家里有几个人我就排第几李察德:他们不喜欢你吗?豆豆:也不是,就是顺便喜欢李察德。
  • 骄阳似火是什么季节(夏季处于几月份)
  • 2024-11-22夏季处于几月份骄阳似火是夏季夏季是一年的第二个季节,是四季之一在大多数地区夏季是气候炎热、有可能缺水的季节,此外,由于夏季时北半球大部份学生都放暑假,因此也是相当旺盛的旅游季节在北温带,气象意义的夏季为5月21日(。
  • 紫罗兰都有哪些颜色(关于紫罗兰的科普)
  • 2024-11-22关于紫罗兰的科普科普:粉嫩粉嫩的紫罗兰粉紫翡翠是紫罗兰五姐妹中其中一员,关于紫罗兰,之所以呈现紫色,是因为含致色物质“锰元素”锰元素越多,紫罗兰翡翠的颜色就越紫,而粉紫就是外观颜色呈粉色的翡翠,有着粉中有紫、紫中有粉。