go语言如何解决高并发计数问题(关于go语言中的协程相关知识点总结)
go语言如何解决高并发计数问题(关于go语言中的协程相关知识点总结)
2024-07-07 10:05:03  作者:不要抱怨  网址:https://m.xinb2b.cn/tech/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)}

  • 电子发票答疑(最新电子发票常见问题百问百答)
  • 2024-07-08最新电子发票常见问题百问百答全面数字化的电子发票常见问题即问即答日期:2022.6.9来源:北京市税务局1.什么是全面数字化的电子发票?答:全面数字化的电子发票(以下称全电发票)是与纸质发票具有同等法律效力的全新发票,不以纸质形。
  • 凤凰电动自行车质量(凤凰R1电动自行车测评)
  • 2024-07-08凤凰R1电动自行车测评您在阅读前请点击上面的“关注”二字,后续会为您提供更多有价值的相关内容,感谢您的支持电动自行车和摩托车一样,有多种造型,我们道路上比较常见的是踏板电动车,这种车型的优势是通行平稳,减震做得好,而且,用。
  • 如何判定食品的保质期和食用期(食品的保质期是如何确定的)
  • 2024-07-08食品的保质期是如何确定的在日常生活中,食品保质期是关乎食品安全的重要依据,也是我们选购食品时的关键参考因素,那么,如何正确的认识食品保质期呢?一、食品包装上的保质期是如何确定计算的?开罐即食的食品是怎么回事?食品包装上的保质。
  • 中药桔梗的功效与作用(中药桔梗的功效有哪些)
  • 2024-07-08中药桔梗的功效有哪些桔梗具有清喉利咽,祛痰止咳,排除脓肿的功效桔梗中的有效物质桔梗皂苷,对于口腔、咽喉部、胃肠黏膜具有直接性的刺激,可以有效刺激痰液的析出,有利于排出痰液具有抗炎以及提高免疫力的作用,桔梗的抗炎强度也是比。
  • 奶瓶刷怎么挑选(奶瓶刷的挑选方法)
  • 2024-07-08奶瓶刷的挑选方法爸爸妈妈可以根据奶瓶材质,来选择奶瓶刷材质类型奶瓶刷是用来刷洗奶瓶的,选购奶瓶刷,就要根据奶瓶材质来选择一般来说,玻璃奶瓶应该用尼龙奶瓶刷,而塑料奶瓶则使用海绵奶瓶刷因为尼龙刷容易把塑料奶瓶的内壁磨毛。
  • 沈傲君婚姻状况如何:年轻颜值惊艳众人
  • 2024-07-08沈傲君婚姻状况如何:年轻颜值惊艳众人她被粉丝们亲切地称为“中国宋慧乔”,也是大众心目中的古典美人,和聂远相恋十年后,被抛弃,受情伤后,相亲嫁给皇族后代,现如今发福到认不出,究竟是为什么?人如其名,沈傲君本人也是有自身的傲气所在,所以在娱。
  • 办理护照必须是在本地办理么(办理护照必须本人去吗)
  • 2024-07-08办理护照必须本人去吗很多人去办护照的时候,自己照好了照片,但是审核有时没有通过,那办理护照照片有什么要求呢?办理护照必须本人去吗?下面我们来看看在生活中,很多人会去办理护照,但是对于办理护照照片有什么要求,办理护照必须本。
  • 上海海关学院为什么还要提前批呢 2022年提前批数据出炉
  • 2024-07-08上海海关学院为什么还要提前批呢 2022年提前批数据出炉近日,江西省率先出炉提前批数据,不出所料,上海海关学院一如既往的强势,一个二本院校的提前批录取分数,已经抵近和赶超985、211大学先上数据,大家领略一下,这所强势二本院校的风采和魅力!在江西,上海海。
  • 帕萨特b5发动机拆解(帕萨特B5发动机缺缸)
  • 2024-07-08帕萨特B5发动机缺缸故障现象一辆帕萨特B5轿车,1.8T发动机,行驶里程130,000km此车故障现象为启动困难,且着车后发动机缺缸故障诊断与排除接车后,确认故障确实如上所述,首先用解码器读取故障码,显示有很多故障码清除。
  • 凝胶水面膜使用方法(凝胶水面膜的正确使用方法)
  • 2024-07-08凝胶水面膜的正确使用方法清洁干净皮肤后,脸上拍打一层爽肤水,然后取出适量的凝胶面膜,均匀的涂抹在肌肤上,慢慢的凝胶面膜就会凝固,大约敷上15分钟左右,取下面膜用清水冲洗干净,最后完成日常护肤就好了凝胶面膜即水凝胶面膜,是以亲。
  • 百花髻发型是什么样的(美人髻适合啥发型)
  • 2024-07-08美人髻适合啥发型美人尖或美人髻(ji),也有称三棱髻,它指人体额头正中的头发往下(前)再长一点,形成一个小小的尖状;其也指双眉上翘,形成一种十分独特的浓重眉种观正面,整体发髻外围形成“M”型,左右两鬓对称古代宫廷建制。