go语言如何解决高并发计数问题(关于go语言中的协程相关知识点总结)
go语言如何解决高并发计数问题(关于go语言中的协程相关知识点总结)
2024-09-30 09:17:54  作者:不要抱怨  网址:https://m.xinb2b.cn/sport/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-09-30秦海璐接到钢的琴剧本当年,秦海璐接到《钢的琴》剧本时,就向导演推荐了自己的男神王千源于是导演就打电话邀请王千源出演这部戏,可王千源却说:“我已经在和别的戏谈合作了,没时间接您的戏”就这样拒绝了导演的邀请有一次,秦海璐问道。
  • 眼底出血是不是眼球里红红的(眼睛变红了是眼表出血)
  • 2024-09-30眼睛变红了是眼表出血眼睛作为我们接触外界的重要器官,其重要性不言而喻然而现在上班看电脑、下班刷手机,加班熬夜成常态,中午小憩趴着睡,眼睛干涩揉一揉……这些都使眼睛变成“兔子眼”的情况日益增加看着红红的眼睛,惊恐万分,“完。
  • 室内好养的小盆栽花卉(开花漂亮还好养)
  • 2024-09-30开花漂亮还好养6种小盆栽花卉,开花漂亮还好养,能把阳台变成小花园夏天到了,在家里的阳台上养一些开花漂亮的花卉盆栽,整个夏天都能开花一茬接一茬,把阳台打造成美丽的小花园由于阳台上的空间有限,很多花友不能像在院子里一样。
  • 一起奔赴更好的未来才有意义(信心成就双向奔赴)
  • 2024-09-30信心成就双向奔赴【浦江观察】光明日报记者方莉进博会进入第2天,“四叶草”里人头攒动,热闹非凡在食品与农产品展区,各种“试吃”体验层出不穷,更有精彩纷呈的外国乐队演奏、跨洋直播等现场活动;在医疗器械及医药保健展区,各家。
  • 小白嘴山药营养价值及攻效(小白嘴山药的作用)
  • 2024-09-30小白嘴山药的作用小白嘴白山药是白山药系列的优质品种小白嘴白山药营养价值极其丰富,经化验分析,每百克中含有碳水化合物19.9--21.5克,蛋白质1.9--2.25克,铁﹑锌﹑铜﹑锰的含量也很高,除此之外还富含人体所需。
  • 韩国idol粉丝互动(富二代男idol所在组合名存实亡)
  • 2024-09-30富二代男idol所在组合名存实亡韩娱圈向来不缺富二代,相比较于那些为了养家糊口而出道的艺人们来说,这些家里有矿的人进娱乐圈大概就只是为了好玩......相信大家应该都还记得帝国之子这个男团吧,组合内的成员朴炯植就是圈中出了名的富二代。
  • 柴油国六车啥时候开始实施(柴油车国六标准7月1日起实施)
  • 2024-09-30柴油车国六标准7月1日起实施广州日报讯(全媒体记者杜娟通讯员穗环宣)日前,生态环境部、工业和信息化部、海关总署联合发布《关于实施重型柴油车国六排放标准有关事宜的公告》(下称《公告》),其中明确,自2021年7月1日起,全国范围全。
  • 如懿和甄嬛哪个境界高(如懿和甄嬛相比)
  • 2024-09-30如懿和甄嬛相比如懿传看到一半时,心底就有个感悟,如懿的段位,比甄嬛低太多了果不其然,如懿到底是挂了,挂的原因是心郁结已久,还是为了男人,不明白自己的心意如懿传大结局那集,上一届冠军甄嬛白发人送黑发人,跑去皇帝的养心。
  • mlxg怼锐雯(MLXG直播被黑白锐雯坑)
  • 2024-09-30MLXG直播被黑白锐雯坑说到直播,小编要说一个主播,这个在主播还是比较有名气的,是前段时间突然崛起的主播,这个主播就是黑白,黑白一手锐雯打得是非常的好,但是他也有一个致命的弱点,就是英雄池太浅,如果黑白不用锐雯,那实力可能会。
  • jeet air plus无线耳机评测(越级轻奢音质体验)
  • 2024-09-30越级轻奢音质体验保留3.5mm耳机口的手机厂商还有几个?放眼整个手机市场,一只手都数的过来,而这些保留3.5mm耳机接口的厂商通常是定位游戏手机的,游戏手机的受众比较少,人们更不会为了一个3.5mm的耳机接口去购买一。
  • 人际交往心理学如何不得罪人(人际交往心理学)
  • 2024-09-30人际交往心理学你可能经历过:到朋友家做客,朋友问你吃什么,你说随便;和朋友去看场电影,刚刚从电影院出来,你朋友说这场电影太烂了不好看,你本来内心觉得挺好看,可结果违心地附和了一句,是啊确实难看;和朋友一起去某个目的。