我有5个巨大的(每个400万行)日志文件,我目前在Perl中处理,我想我可能会尝试在Go中执行同样的功能。所以,在Go中非常缺乏经验,我正在考虑如下操作。任何意见的方法将不胜感激。 一些粗糙的伪代码:Golang:同时处理5个大文件
var wg1 sync.WaitGroup
var wg2 sync.WaitGroup
func processRow (r Row) {
wg2.Add(1)
defer wg2.Done()
res = <process r>
return res
}
func processFile(f File) {
wg1.Add(1)
open(newfile File)
defer wg1.Done()
line = <row from f>
result = go processRow(line)
newFile.Println(result) // Write new processed line to newFile
wg2.Wait()
newFile.Close()
}
func main() {
for each f logfile {
go processFile(f)
}
wg1.Wait()
}
所以,想法是,我同时,然后将每个文件中的所有行会反过来也可以同时处理处理这5个文件。
这会工作吗?
2015-12-20 Kosie
对于I/O绑定任务,您可能无法从CPU并发性中获得太多。你也可能想看看频道。 –
“过程r”是什么?如果它是相对“容易”的东西,那么可能不值得在单独的gorutine中进行 - 开销大于增益。另外,结果是,你会有一个“日志数据集”(即所有5个文件合并为一个)还是会有5个不同的结果集? –
@ain我的理解是它必须是非常实体的。 goroutines的开销很低。 –