缓冲通道是否维持秩序?

lan*_*rat 8 channel go

在Go中,缓冲通道是否有任何订单保证?

例如:您有两个共享频道的goroutine A和B. 当B从中读取数据时,将数据推送到通道.您是否有必要B将读取数据按照A将其放入频道的顺序?

据我所知,如果有多个生产者或消费者,订单可能是非确定性的,但我特别询问只有1个生产者和1个消费者.

Von*_*onC 34

你可以看到" The Go Of Channels Go "中所说的频道概念:它显示了如何遵守订单或读/写.
另见频道:

接收器始终阻塞,直到有数据要接收.

  • 如果通道未缓冲,则发送方将阻塞,直到接收方收到该值.
  • 如果通道有缓冲区,则发送方仅阻塞,直到将值复制到缓冲区为止; 如果缓冲区已满,则表示等待某个接收方检索到某个值.

无缓冲的频道

http://3.bp.blogspot.com/-vnJIWvlbP-E/UwDVICJKB9I/AAAAAAAANX0/T04V_58i8Vs/s1600/Screen+Shot+2014-02-16+at+10.10.54+AM.png

缓冲频道

http://1.bp.blogspot.com/-GkVAtGeUzrs/UwIQ6AezJmI/AAAAAAAANYE/5XWpxN-zA3w/s1600/Screen+Shot+2014-02-17+at+8.38.15+AM.png

  • 很好地使用图像来解释这个概念! (3认同)