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

阅读: 评论: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 second---------")
j, ok := <-ch
if ok {
fmt.Println("received ", j)
} else {
fmt.Println("received all jobs")
over <- true
return
}
}
}()
背景音乐播放系统for j := 1; j <= 3; j++ {
fmt.Println("ready to senting", j)
ch <- j
fmt.Println("sent job", j)
}
close(ch)
fmt.Println("sent all jobs,ch is closed")
<-over
}隧道烘箱验证方案
缓存为2结果:
ready to senting 1
sent value 1
GoforSTART 1
ready to senting 2
sent value 2
ready to senting 3
-
------wait 2 second---------
received  1
GoforSTART 2
sent value 3
sent all value,ch is closed
-------wait 2 second---------
received  2
GoforSTART 3
-------wait 2 second---------
received  3
GoforSTART 4
-
------wait 2 second---------
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-22 04:29:11,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/2/108568.html

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

标签:苹果   缓存   理解   验证   金属   背景音乐   等待
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图