Go:緩沖通道總和更快?在以下游樂場鏈接中,http://play.golang.org/p/8OAbtn6koN一種方法包含緩沖通道,我預計它的性能會更好,因為它不等待同步。 ch := make(chan int, 2)對隨機數(shù)數(shù)組求和的三種方法。我對這三個函數(shù)進行基準測試,如以下鏈接:http://play.golang.org/p/JK3yL4QwOJ我的期望是緩沖通道是異步的,除非通道已滿,否則發(fā)送或接收不需要等待,因此緩沖通道總和比未緩沖通道總和性能更好,因為同步所有 goroutine 不需要任何時間。[問題 1] 所以我為緩沖通道 sum 函數(shù)提供了 3 個緩沖區(qū)大小,但基準測試結(jié)果如下:Benchmarklinear 10 122170091 ns/opBenchmarkchSum 20 121921287 ns/optesting: BenchmarkchSum left GOMAXPROCS set to 4BenchmarkchSumBuffer 20 118524619 ns/optesting: BenchmarkchSumBuffer left GOMAXPROCS set to 4ok ~/Benchmark_sum_01 4.056s沒有意義,為什么在這種情況下兩個通道的總和表現(xiàn)相同?帶緩沖區(qū)的應(yīng)該表現(xiàn)更好嗎?[問題2]如果我給 ch := make(chan int, 1)我得到Benchmarklinear 10 122170091 ns/opBenchmarkchSum 20 121921287 ns/optesting: BenchmarkchSum left GOMAXPROCS set to 4BenchmarkchSumBuffer 10 118524619 ns/optesting: BenchmarkchSumBuffer left GOMAXPROCS set to 4如果我給 ch := make(chan int, 2)我得到Benchmarklinear 10 122170091 ns/opBenchmarkchSum 10 121921287 ns/optesting: BenchmarkchSum left GOMAXPROCS set to 4BenchmarkchSumBuffer 20 118524619 ns/optesting: BenchmarkchSumBuffer left GOMAXPROCS set to 4但結(jié)果非常不一致。每次運行基準測試時,都會得到不同的結(jié)果。緩沖區(qū)大小與性能無關(guān)?為什么緩沖區(qū)大小為 2 的基準會給我不同的結(jié)果。隨著緩沖區(qū)大小的增加,兩個 goroutine 永遠不會阻塞,因此似乎花費的時間更少。提前致謝。
1 回答

慕碼人8056858
TA貢獻1803條經(jīng)驗 獲得超6個贊
缺乏緩沖是無關(guān)緊要的。在無緩沖通道上有一個掛起的接收。因此,只要您在通道上發(fā)送一個值,它就會被接收,從而釋放通道以供下一次發(fā)送。
- 1 回答
- 0 關(guān)注
- 207 瀏覽
添加回答
舉報
0/150
提交
取消