2012-12-02 78 views
5

由於Go有通道,我想知道爲什麼標準庫似乎並沒有被設計用於IO。IO通道vs讀寫器

有讀者和寫作者的類型,而不是使用渠道的問題是什麼?

函數可以返回字節切片的信道(假定單字節或甚至單個位回報效率太低),並採取在註銷請求信道和用於錯誤報告的信道。

- 好奇的Go新手。

回答

9

通道非常適合在goroutines之間進行通信。當一個程序做一些簡單的事情時,比如讀取stdin,對流進行處理並將結果輸出到標準輸出 - 然後使用一個通道是一種矯枉過正,不必要地損害了性能。

只要標準庫不以某種特定的夠程相互通信的地方的東西提供,有沒有很好的理由來模擬簡單的操作,像那些io.Readerio.Writer使用渠道,各自已經基於通道方法集(API)。

此外,在需要的地方,在簡單的實現可以被包裹在一個信道,而相反,以「解包」的信道執行返回到其原始的是不可能的。另外,Go作者顯然很喜歡清晰,導致性能瓶頸不被隱藏(和令人驚訝)。

+2

所以我收集你的觀點有兩方面:1)渠道將是在這種情況下性能瓶頸,和2)信道將隱藏IO和設計師不喜歡這樣。對讀寫器與通道進行性能測量以掌握實際的性能損失將會是一件很有意義的事情 - 當然要意識到編譯器可以針對簡單情況進行優化,並且隨着時間的推移優化將變得更加複雜。 Rob Pike已經談到了渠道的性能優化機會。 –