为了账号安全,请及时绑定邮箱和手机立即绑定

Go中缓冲通道有什么用?

Go中缓冲通道有什么用?

Go
隔江千里 2021-07-30 18:00:06
我从这个问题“ Golang - 什么是通道缓冲区大小? ”中了解到,如果通道被缓冲,它就不会阻塞。c := make(chan int, 1)c <- data1 // doesn't blockc <- data2 // blocks until another goroutine receives from the channelc <- data3c <- data4但我不明白它有什么用。假设我有 2 个 goroutine,第一个将接收 data1,第二个接收 data2,然后它将阻塞,直到任何子例程可以自由处理 data3。我不明白这有什么区别?如果没有缓冲区,它会以相同的方式执行。你能解释一下缓冲有用的可能场景吗?
查看完整描述

2 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

缓冲通道允许向缓冲通道添加数据的 goroutine 继续运行和做事,即使从通道读取的 goroutine 开始有点落后。

例如,您可能有一个接收 HTTP 请求的 goroutine,并且您希望它尽可能快。但是,您还希望它排队一些后台作业,例如发送电子邮件,这可能需要一段时间。所以 HTTP goroutine 只是解析用户的请求,并快速将后台作业添加到缓冲通道中。其他 goroutine 会在有时间的时候处理它。如果您的 HTTP 请求突然激增,如果您的缓冲区足够大,用户将不会注意到 HTTP 中的任何缓慢。


查看完整回答
反对 回复 2021-08-02
  • 2 回答
  • 0 关注
  • 231 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信