我明白这个问题“Golang - What is channel buffer size?”,如果通道被缓冲,它不会阻塞。Go中缓冲频道的用途是什么?
c := make(chan int, 1)
c <- data1 // doesn't block
c <- data2 // blocks until another goroutine receives from the channel
c <- data3
c <- data4
但我不明白它是什么用法。假设我有2个例程,第一个会收到data1,第二个收到data2,然后它会被阻塞,直到任何子程序可以自由地处理data3为止。
我不明白它有什么不同?它会执行相同的方式没有缓冲区。你能解释一下缓冲有用的情况吗?
我想补充一点,一个好的经验法则是**缓冲是提高性能的工具**。千万不要因为使用缓冲而试图避免死锁等错误,因为这是徒劳的。如果你的应用程序不能在没有缓冲的情况下发生死锁,那么在添加缓冲时它不会发生死锁......但它可能运行得更快。首先设计一个简单的无死锁无缓冲网络,然后调整性能。 –