go语言如何解决高并发计数问题(关于go语言中的协程相关知识点总结)
go语言如何解决高并发计数问题(关于go语言中的协程相关知识点总结)
2024-09-27 08:05:55  作者:不要抱怨  网址: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-09-28周润发一手提携的廖伟雄,早年和陈玉莲、吕良伟同期出道,相比陈玉莲吕良伟这样相貌出众的人来说,廖伟雄真的就是一个"路人"长相自然也就没有人什么人会注意到他,TVB也不会给他安排男主这样的角色所以在港片辉。
  • 雷佳音粤语十级(给自己取名到处留情)
  • 2024-09-28给自己取名到处留情凭借《绣春刀:修罗战场》里的出色表演,雷佳音被提名今年的金马奖最佳男配距离上一次电影奖项的提名是4年前的《黄金大劫案》,那时候他还没有什么水花而如今,大部分观众都能认得这个“头围很大”的雷佳音,甚至许。
  • 韩国实力男演员孔侑(两次MBC大赏演技奖)
  • 2024-09-28两次MBC大赏演技奖最近《鬼怪》挺火的,摩卡看了两集,觉得确实不错最起码,比《蓝色大海的传说》不知道强哪里去了所以说,无论是国产剧还是韩剧,其实最重要的仍然是故事,皮相可以吸引观众看,却无法留住观众看图片来源于网络随着《。
  • 张淇与萧敬腾的声音对比(萧敬腾默声声动人)
  • 2024-09-28萧敬腾默声声动人《我们的歌》音乐盛典上半场开启,A组陈慧娴、孟慧圆、杨坤、马嘉祺、张淇、萧敬腾与B组林志炫、詹雯婷、大张伟、张远、焦迈奇、黄霄雲共赴音乐盛宴,由于马嘉祺无法来到现场,所以他和杨坤作为助力嘉宾,不参与比。
  • 叶开泰老字号怎么发展 四百年叶开泰今日健民集团
  • 2024-09-28叶开泰老字号怎么发展 四百年叶开泰今日健民集团(报告出品方/作者:国盛证券张金洋杨春雨)一、健民集团:焕发新生的特色中成药企业1.1四百年叶开泰,今日健民集团健民集团,始创于1637年,原名“叶开泰”,解放前便享有“初清三杰”、“中国四大药号”的。
  • 软枣猕猴桃的种植技术(软枣猕猴桃栽培技术)
  • 2024-09-28软枣猕猴桃栽培技术软枣猕猴桃,又名软枣子,还有个高大上的名字叫奇异莓,就跟老婆饼终究只是个饼一样,它也还是猕猴桃中的一员,不过属于皮薄没毛的净果组软枣猕猴桃甜酸适口、果肉细腻、风味独特,既能鲜食,又可作加工原料,是一种。
  • 时光有暖早安语录(患难见真情烈火炼真金)
  • 2024-09-28患难见真情烈火炼真金常听人说,人世间最纯净的友情,只存在于孩童时代在家靠父母,出外靠朋友表明了朋友的重要,也表明了朋友的价值,朋友就像人民币,有真有假假朋友在你没事的时候,会经常来找你真朋友在你有事时就来找你假朋友在喝酒。
  • 兵马未动但是粮草先行(兵马未动粮草先行)
  • 2024-09-28兵马未动粮草先行中国古代高度重视军事后勤问题,《孙子兵法》中指出:“军无辎重则亡,无粮食则亡,无委积则亡而古代主要的军事后勤问题就是粮食问题,后世、此归结为“兵马未动,粮草先行《孙子兵法》也指出战争会耗费大量的财。
  • 森林中的武器有哪些(揭秘森林卫士的)
  • 2024-09-28揭秘森林卫士的森林是生命的摇篮、绿色的金库、天然的储水器,是大自然赐给人类最美的礼物然而,每年仍有近万起火灾吞噬着茫茫林海,对生态造成极大威胁武警森林部队是一支保护生态的近卫军,哪里有森林火灾哪里就有他们的身影在火。