猿问

IO通道与读写器

由于Go具有通道,我想知道为什么标准库似乎还没有被设计为将它们也用于IO。

而是有读者和作家类型,但是使用频道会出现什么问题?

一个函数可以返回一个字节片通道(假设单字节,甚至单位返回效率太低),并接收一个用于取消请求的通道和一个用于错误报告的通道。

-好奇的Go新手。


元芳怎么了
浏览 212回答 3
3回答

郎朗坤

通道非常适合在goroutine之间进行通信。当程序执行简单的操作(例如读取stdin,对流进行某些操作并将结果输出到stdout)时,使用通道是一种过大的选择,不必要地损害了性能。只要标准库在某些地方没有提供特定于goroutine相互通信的东西,就没有充分的理由为简单的操作建模,例如使用基于通道的方法集(API)的通道io.Reader或io.Writer使用通道的操作。另外,在需要的地方,可以将简单的实现方式包装在一个通道中,相反,将“通道”实现“解包”回其原始状态是不可能的。而且,Go的作者显然喜欢显性,从而导致性能瓶颈没有被隐藏(并且令人惊讶)。

摇曳的蔷薇

我觉得还有一个原因io.Reader和io.Writer存在,是因为他们在单线程水平发挥出色; 通道几乎专门用于goroutine通信或多线程模型。在某些情况下,您可以互换使用它们,但是它们旨在解决2个不同的挑战。 io.Reader并且io.Writer还具有EOF的概念,除非您在通道上分层放置单独的协议,否则无法轻松地将其复制到通道中-当然,这将是一个过大的杀伤力。PS关闭通道与EOF都不相同,因为关闭通道会阻止将来使用它。
随时随地看视频慕课网APP

相关分类

Go
我要回答