我有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

+3

对于I/O绑定任务,您可能无法从CPU并发性中获得太多。你也可能想看看频道。 –

+1

“过程r”是什么?如果它是相对“容易”的东西,那么可能不值得在单独的gorutine中进行 - 开销大于增益。另外,结果是,你会有一个“日志数据集”(即所有5个文件合并为一个)还是会有5个不同的结果集? –

+0

@ain我的理解是它必须是非常实体的。 goroutines的开销很低。 –