go - 了解缓冲 channel 的工作原理

标签 go

谁能给我解释一下 channel 在这些场景中是如何工作的:

  1. 如果 channel 没有缓冲,如果您在尚未收到任何消息时向 channel 2 发送消息,它是否会阻止应用程序?

  2. 如果有缓冲区,一旦达到缓冲量,它的行为就像#1?因此,如果缓冲区为 2,则在 2 条消息之后它会阻塞,直到您收到至少 1 条消息?

既然你必须设置缓冲量,你不能只有一个 channel 来存储任意数量的消息吗?

最佳答案

  1. 是的。
  2. 是的。
  3. 不,您不能拥有无限缓冲的 channel 。

详细介绍 in the Go tour .

基本上,无论何时例程在 channel 上发送,该例程都会阻塞,直到某物 可用于接收它。这可能是 channel 缓冲区,也可能是试图从 channel 接收的东西。同样,每当例程在 channel 上接收时,该例程就会阻塞,直到有东西可以接收为止。

关于go - 了解缓冲 channel 的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48174814/

相关文章:

json - 在golang中解析JSON的一部分

去为 gcp compute sdk 创建一个 mock

unit-testing - 单元测试 tls 客户端

go - 我的结构没有正确编码并且缺少一个属性

sql - 错误 tcNull Golang HanadB

shell - Golang requirements.txt 等价物

linux - 在 vim 插入模式下从左向右移动光标时随机出现在屏幕上的字符

go - 如何获取URL的最后一个路径段

go - Response.Body 返回 "empty"正文

docker - 在 docker 中构建 golang 项目 - 在 $GOPATH 或 $GOROOT 中找不到包