【发布时间】:2016-03-25 21:53:36
【问题描述】:
我是一名刚毕业的 SWE,正在学习 Go(并且喜欢它)。
我正在为 Wikipedia 转储文件构建一个解析器 - 基本上是一个巨大的 bzip2 压缩 XML 文件(约 50GB 未压缩)。
我想同时进行流解压和解析,这听起来很简单。为了减压,我这样做:
inputFilePath := flag.Arg(0)
inputReader := bzip2.NewReader(inputFile)
然后将阅读器传递给XML解析器:
decoder := xml.NewDecoder(inputFile)
但是,由于解压缩和解析都是昂贵的操作,我希望它们在单独的 Go 例程上运行以利用额外的内核。我将如何在 Go 中执行此操作?
我唯一能想到的就是将文件包装在一个 chan []byte 中,并实现 io.Reader 接口,但我认为可能有一种构建方式(和更简洁)的方式来实现它。
有人做过这样的事吗?
谢谢! 曼努埃尔
【问题讨论】:
标签: xml go concurrency goroutine bzip2