【问题标题】:How big is the channel queue in Golang?Golang 中的通道队列有多大?
【发布时间】:2017-05-16 20:01:30
【问题描述】:

在 Golang 中,无缓冲通道只是一个 FIFO 队列。任何时候该队列中可以有多少项目?有限制吗?

【问题讨论】:

  • 无缓冲意味着没有缓冲(零)。见Golang - What is channel buffer size?
  • 我明白了,但是未缓冲与缓冲属性仅影响执行的阻塞,而不是添加到队列中的事物的数量。如果我继续同时调用一个发送到无缓冲通道的 go 例程,我仍然会看到按顺序处理的所有消息,没有任何消息丢失 - 据我所见
  • 你的问题是有多少阻塞的 goroutine 可以等待写入无缓冲通道?
  • @e0k 绝对是的!以及将在哪些订单程序中处理?
  • 只是一个小提示,不要认为缓冲通道是队列

标签: go


【解决方案1】:

可以在通道本身中的项目数为零,因为它是无缓冲的。但是对于可以在通道上等待发送的 goroutine 的数量没有限制。 (当一个 goroutine 尝试在没有缓冲区或缓冲区已满的通道上发送时,它会阻塞,直到另一个 goroutine 准备好从该通道接收。)

【讨论】:

  • 会接受最有意义的答案,但是 goroutine 的数量真的是无限的吗?
  • 同样在这种情况下,如果通道没有缓冲,goroutines 是否也会以 FIFO 顺序提供服务?还是随机的?
  • Max number of goroutines。 goroutines 的数量没有语言上的限制,但是由于每个都使用少量的内存,这施加了物理限制。
  • 当接收器可用时,阻塞的 goroutine 会按照 FIFO 顺序解除阻塞。
猜你喜欢
  • 2019-04-21
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
相关资源
最近更新 更多