IO通道与读/写器

Ben*_*sen 5 io concurrency channel go

由于Go有渠道,我想知道为什么标准库似乎没有被设计为将它们用于IO.

相反,有读者和作者类型,但使用渠道会有什么问题?

函数可以返回字节切片的通道(假设单字节,甚至单比特返回效率太低)并且接收用于取消请求的信道和用于错误报告的信道.

- 好奇的Go新手.

zzz*_*zzz 9

频道非常适合在goroutines之间进行通信.当一个程序执行简单的操作时,例如读取stdin,使用流做某事并将结果输出到stdout - 然后使用通道是一种过度杀伤,不必要地伤害性能.

只要标准库在某些地方没有提供特定于goroutines彼此通信的东西,就没有充分的理由来模拟简单的操作,比如使用io.Readerio.Writer使用通道,分别具有基于通道的方法集(API).

另外,在需要的地方,简单的实现可以包装在一个通道中,而相反,将一个通道实现"解包"回原语是不可能的.此外,Go作者显然喜欢显性,导致性能瓶颈不被隐藏(并且令人惊讶).

  • 所以我认为你的观点是双重的:1)在这种情况下,通道将成为性能瓶颈,2)通道会隐藏IO而设计师不喜欢这样.对读取器/写入器与通道进行性能测量以了解实际性能损失将会很有趣 - 当然,实现编译器可以针对简单情况进行优化,并且随着时间的推移优化将变得更加复杂.Rob Pike谈到了渠道的绩效优化机会. (2认同)