使用 goroutine 阅读文本

我想用 goroutines 读取文本文件。从文件中读取的文本顺序无关紧要。如何并发读取文件?


scanner := bufio.NewScanner(file)

for scanner.Scan() {

  lines = append(lines, scanner.Text())

}

例如,如果文本文件包含I like Go,我想阅读这个文件而不考虑顺序。它可能是[]string{"Go", "like", "I"}


缥缈止盈
浏览 162回答 1
1回答

隔江千里

首先,如果您从 io.Reader 读取,则将其视为从流中读取。它是单个输入源,由于它的性质,您无法“并行读取”-在引擎盖下,您正在获取字节,等待另一个,再获取一个等等。稍后在缓冲区中用单词标记它。其次,我希望您不要以“让我们添加 gouroutines 并且一切都会加速”的方式尝试使用 goroutines 作为“银弹”。如果 Go 为您提供了如此简单的并发使用方式,这并不意味着您应该在任何地方使用它。最后,如果您真的需要将大文件并行拆分为单词,并且您认为拆分部分将成为瓶颈(不知道您的情况,但我真的很怀疑)-那么您必须发明自己的算法并使用'os' 包到文件的 Seek()/Read() 部分,每个部分都由它自己的 gouroutine 处理并以某种方式跟踪哪些部分已经被处理。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go