go语言如何解决高并发计数问题(关于go语言中的协程相关知识点总结)
go语言如何解决高并发计数问题(关于go语言中的协程相关知识点总结)
2024-07-04 12:36:42  作者:不要抱怨  网址:https://m.xinb2b.cn/life/joy265172.html

接上一篇关于go语言中的协程相关知识点总结(一)继续分享 关于go协程之间进行相互通信的机制的知识点,我来为大家科普一下关于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)}

  • 现役三巨头排行(最佳球员一周收入161万)
  • 2024-07-04最佳球员一周收入161万也许你不认识这个人,这是卢卡莫德里奇,世界杯金球奖得主,欧洲最佳球员,世界最佳球员,他每周的薪水是18万英镑,相当于161万人民币,仅仅是一周哦,用的手机很老旧,苹果5S,有人说,这也太寒酸了,我一月。
  • 浮图缘小王爷恋爱观(一段不寻常的爱情)
  • 2024-07-04一段不寻常的爱情紧接上回分享,《浮图缘》这部剧吸引我的点就是王鹤棣主演的又一部古装剧,去年夏天东方青苍爆火,对这部剧期待值也高了起来,这是我看王鹤棣参演的第三部古装,与他相识于《遇龙》,而《苍兰诀》里的旷世月尊东方青。
  • 小熊请客故事的教育意义(许妈孙子奇奇早起帮忙擦桌子)
  • 2024-07-04许妈孙子奇奇早起帮忙擦桌子周六早上,很多人在睡懒觉的时候,3岁多的奇奇已经在妈妈的指挥下迈着欢快的步伐擦桌子,一边擦还一边背着三字经:“人之初,性本善性相近,行相远苟不教,性乃迁教之道,贵以专”许妈儿媳田静给视频配文:“这才是。
  • 牛有四个胃其中哪个才是真正的(牛为什么有四个胃)
  • 2024-07-04牛为什么有四个胃严格来说,牛只有一个胃,只是分成四个胃室,因为牛的食物(主要是青草)不易分解,必须分成数阶段来消化在最大的第一胃室「瘤胃」中,细菌会开始分解青草接著,食物会进入最小的胃室「蜂巢胃」,与唾液混合成反刍物。
  • 十二星女谁在爱情中最独立(揭与十二星女接吻的必备要素)
  • 2024-07-04揭与十二星女接吻的必备要素双鱼女双鱼女的任性和孩子气总是让人爱不释手,笨笨的又很固执,感觉就像没懂事的孩子强穿妈妈的高跟鞋,让人哭笑不得所以在双鱼女犯错时,千万不要去呵斥责备她,默默替她收拾烂摊子,然后笑着告诉她:我就喜欢看着。
  • 琥珀蜜蜡初学者教程(蜜蜡基础知识大全)
  • 2024-07-04蜜蜡基础知识大全琥珀,当今时尚界的新宠儿,一种区别于其它宝石的“另类宝石”,其种类丰富、色彩艳丽、历史悠久琥珀是什么琥珀,是一种透明的生物化石,是松柏科、云实科、南洋杉科等植物的树脂化石树脂滴落,掩埋在地下千万年,在。
  • 刘昊然翻跟头高能亮相(刘昊然暴瘦冯绍峰变)
  • 2024-07-04刘昊然暴瘦冯绍峰变为了脸小好上镜,许多明星都想瘦成一道闪电然而“凡事皆有度,过犹则不及”,有时暴瘦不见得是件好事之前郑爽的暴瘦引起了很大的争议,骨瘦如柴的爽妹子,这腿已经细的超乎常人想象,整个人的气色看起来也不好了不过。
  • 安庆巨石山当地人免费吗(安庆巨石山520爱情网红地)
  • 2024-07-04安庆巨石山520爱情网红地安庆有一个情缘福地,海拔刚好520米,据说是未婚男女的爱情朝圣地说到安庆的自然风光,很多人会首先想到安徽三大名山之一,与黄山、九华山齐名的天柱山天柱山的确雄伟壮观但在安庆市郊,宜秀区罗岭镇,还有一座巨。
  • 国际招标英文(投标还是招标)
  • 2024-07-04投标还是招标Tender和bid这两个词在公司投标或者招标的时候经常出现,因为它们的含义非常相似,都可以表示“招标,投标或者竞标”,而且既是名词也可以是动词,所以的确很容易令人混淆其实大家可以尝试记住tender。
  • 华为手机拍照技巧教程夜景(华为手机暗光拍摄技巧)
  • 2024-07-04华为手机暗光拍摄技巧以前用手机拍摄夜景,效果可以说是并不理想,这是由于手机成像感光器件尺寸较小,画质成像不佳,噪点过多但是最近两年来,各大手机厂商在手机夜景拍摄方面加大研发,夜景拍摄功能越来越好,华为的P系列和M系列、小。
  • 白鹿原的拍摄地在哪里(渭北原上的古村落)
  • 2024-07-04渭北原上的古村落白鹿原是位于古城西安东南方向的一座巨大的黄土塬,作家陈忠实的老家就在白鹿原下然而电影《白鹿原》的拍摄地并没有在这里,而是选择了远在百里之外的渭北合阳县黄土塬边的村子合阳县位于渭河以北,是典型的黄土沟壑。