我明白這個問題「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爲止。
我不明白它有什麼不同?它會執行相同的方式沒有緩衝區。你能解釋一下緩衝有用的情況嗎?
我想補充一點,一個好的經驗法則是**緩衝是提高性能的工具**。千萬不要因爲使用緩衝而試圖避免死鎖等錯誤,因爲這是徒勞的。如果你的應用程序不能在沒有緩衝的情況下發生死鎖,那麼在添加緩衝時它不會發生死鎖......但它可能運行得更快。首先設計一個簡單的無死鎖無緩衝網絡,然後調整性能。 –