golang的channel无缓存和有缓存的区别

更新时间:2023-05-27 22:51:38 阅读: 评论:0

golang的channel⽆缓存和有缓存的区别ch:=make(chan int,n)
有缓存:ch <- j 执⾏n次后会卡主,等待<-ch,即可以存n个值
⽆缓存:先执⾏ch <- j 会卡主,等待有<-ch,可以理解为ch能存值,ch <- j 瞬间给<-ch,
实验:
package main
import (
"fmt"
"time"
)
func main() {
ch := make(chan int, 2)
/
/ch := make(chan int)
over := make(chan bool)
go func() {
for i := 1; ; i++ {
fmt.Println("GoforSTART", i)高一历史必修一思维导图
大学生防骗
time.Sleep(time.Second * 2)
fmt.Println("-------wait 2 cond---------")
j, ok := <-ch
if ok {
fmt.Println("received ", j)
} el {
fmt.Println("received all jobs")
over <- true
return
}
}
}()
for j := 1; j <= 3; j++ {
fmt.Println("ready to nting", j)
ch <- j优美的散文文章
fmt.Println("nt job", j)
}
小贱鸡clo(ch)
fmt.Println("nt all jobs,ch is clod")
<-over
}
缓存为2结果:
ready to nting 1
nt value 1
GoforSTART 1
ready to nting 2
nt value 2
ready to nting 3白鲢鱼的做法
-
------wait 2 cond---------
received  1
GoforSTART 2
nt value 3
nt all value,ch is clod
-------wait 2 cond---------
received  2
GoforSTART 3
-------wait 2 cond---------
received  3
苏州介绍GoforSTART 4
蚕的一生-
满天星绕口令------wait 2 cond---------
received all value
可以看出 发了两个值后ch <- j 卡主,等待<-ch。
注释的是⽆缓存的情况,⼤家可以试试,可以发现,ch <- j  ⼀直等<-ch ,有<-ch才发值。
形象理解:1、ch是能放n苹果的盘,ch <- 是放苹果,<-ch是拿苹果:
a、盘中没苹果(ch没值):可以放苹果,拿苹果的只能等
b、盘中有苹果,但⼩于n(n>ch值数量>0):放苹果,拿苹果都可以执⾏
c、盘中苹果多于n(ch值数量>n):可以拿苹果,放苹果的只能等
2、如果没有盘(ch⽆缓存),放苹果和拿苹果的,只能⼀⼈给,⼀⼈拿

本文发布于:2023-05-27 22:51:38,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/795354.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:苹果   缓存   理解   思维   等待
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图