我有一个循环,每次迭代我都有一个新的通道源,我应该处理它。好的,最好显示我的代码。我有文件列表,我想要尾随的每个文件(如tail -f)。我正在使用github.com/ActiveState/tail包。for _, tailFile := range files { t, _ := tail.TailFile(tailFile, c) // Goroutine per tailing file go func() { for line := range t.Lines { // t.Lines is a channel // Do some magic here } }()}我可以有数千个文件,我想并行运行我的尾巴。如您所见,我的程序将有数千个 goroutine。可以将此循环更改为通道,只有 1 个 goroutine 吗?
1 回答
绝地无双
TA贡献1946条经验 获得超4个赞
您会在博客文章pipelines 中找到类似的方法(每个文件一个 goroutine)。
中的 MD5All 实现
parallel.go
为每个文件启动一个新的 goroutine。在包含许多大文件的目录中,这可能会分配比机器上可用的内存更多的内存。我们可以通过限制并行读取的文件数量来限制这些分配。在 中
bounded.go
,我们通过创建固定数量的 goroutine 来读取文件来做到这一点。
我们的管道现在分为三个阶段:遍历树、读取和消化文件以及收集摘要。
如果您发现自己受到过多 goroutine 分配的内存的限制,您可以组织自己的代码以使用有限数量的 goroutine。(goroutine 本身很便宜,但分配给“魔法”部分的内存可能很大)
- 1 回答
- 0 关注
- 176 浏览
添加回答
举报
0/150
提交
取消