一尘不染

Go io.Pipe的缓冲版本

go

在我自己滚动之前,是否有io.Pipe的缓冲版本(在标准库中还是在第三方库中)?

上下文:我正在尝试使用该解决方案来解析使用bzip2压缩的JSON数据,以便解压缩和解析是并行进行的,但是发现加速非常小。解析未压缩的数据每百万条记录大约需要22秒。解压缩大量数据大约需要相同的时间。如预期的那样,在单线程上完成它们大约需要44秒。使用上述解决方案大约需要41秒。

io.Pipe的文档说:

管道上的读取和写入是一对一匹配的,除非需要多个读取来消耗单个写入。也就是说,每次对PipeWriter的写入都将阻塞,直到它满足从PipeReader读取的一个或多个读取,这些读取会完全消耗写入的数据。数据直接从写入复制到相应的一个或多个读取;没有内部缓冲。

我怀疑这可能是个问题,具体取决于bzip2解压缩器写入数据的方式以及JSON解析器读取数据的方式,因此我想尝试一个缓冲版本。


阅读 237

收藏
2020-07-02

共1个答案

一尘不染

这就是bufio包装的目的。它使您可以使用将任何内容io.Reader转换为缓冲读取器NewReader,或使用来将其io.Writer转换为缓冲写入器NewWriter

(缓冲的IO是否真的可以解决您的特定问题,我不知道…)

2020-07-02