我正在训练一个典型的map-reduce架构(在OS类中),我可以自由决定主进程如何告诉其N子进程解析日志.所以,我有点陷入这两种可能性:
计算行数并为每个映射OR提供X行
每个地图读取其ID的行,下一行读取= current_one + number_of_existent_maps例如:有3个地图,每个地图将读取这些行:
我必须执行此操作才能超出分析整个日志文件的单个进程,因此我在子进程之间拆分作业的方式必须与此目标一致.
你觉得哪一个最好?如何使scanf或fgets适应1)或2)?
我会对2)的一些示例代码感到满意,因为fork/pipes不是我的问题:P
重新编辑: 我不鼓励在这里使用select,只在map procs和将监视读取的reduce进程之间.我现在有限制:
我希望每个进程都读取total_lines/N行.但似乎我必须让map procs打开文件然后读取相应的行.所以这是我的疑惑:
1-使每个过程同时或几乎同时打开文件是不是甚至可能?这有助于加快速度吗?
2-如果不可能这样做,我将让一个父文件打开文件(而不是每个孩子这样做)发送一个具有最小和最大限制的结构,然后map procs将读取他们负责的任何行for,处理它们并给予reduce过程(这对于现在的问题无关紧要).
如何通过N个地图正确划分行数并同时将它们读取?我认为fseek()可能是一个好武器,但我不知道我如何使用它.请帮忙!