为了账号安全,请及时绑定邮箱和手机立即绑定

使用 goroutine 阅读文本

使用 goroutine 阅读文本

Go
缥缈止盈 2021-09-09 13:50:16
我想用 goroutines 读取文本文件。从文件中读取的文本顺序无关紧要。如何并发读取文件?scanner := bufio.NewScanner(file)for scanner.Scan() {  lines = append(lines, scanner.Text())}例如,如果文本文件包含I like Go,我想阅读这个文件而不考虑顺序。它可能是[]string{"Go", "like", "I"}
查看完整描述

1 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

首先,如果您从 io.Reader 读取,则将其视为从流中读取。它是单个输入源,由于它的性质,您无法“并行读取”-在引擎盖下,您正在获取字节,等待另一个,再获取一个等等。稍后在缓冲区中用单词标记它。

其次,我希望您不要以“让我们添加 gouroutines 并且一切都会加速”的方式尝试使用 goroutines 作为“银弹”。如果 Go 为您提供了如此简单的并发使用方式,这并不意味着您应该在任何地方使用它。

最后,如果您真的需要将大文件并行拆分为单词,并且您认为拆分部分将成为瓶颈(不知道您的情况,但我真的很怀疑)-那么您必须发明自己的算法并使用'os' 包到文件的 Seek()/Read() 部分,每个部分都由它自己的 gouroutine 处理并以某种方式跟踪哪些部分已经被处理。


查看完整回答
反对 回复 2021-09-09
  • 1 回答
  • 0 关注
  • 161 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信