微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在叉的帮助下并行search文件中的string? GNU Linux / g ++

我有一个几行文本文件,我正在寻找在这文件中的string。 我需要将以下命令行parameter passing给程序:

文件path

– 我正在寻找的string

– 程序被允许“分叉”以完成这个任务的最大进程数。

如何构build这样的程序?

英特尔指令的LOCK前缀。 有什么意义?

在r中并行使用wordnet(使用Windows 7)

如何批量使用Image Magic批量转换多个子目录中的图像

无法避免subprocessinheritance父进程的cpu关联

Multiprocessing =多个进程正在运行?

一些想法。

你将不得不从每个进程单独打开文件,否则他们将共享一个文件描述符,因此在文件中有一个共享的位置(或不是,请参阅注释,因为这可能是系统特定的…)。

由于磁盘访问和/或缓存缺失模式,您可能看不到您希望的速度提升。

你可能能够通过内存映射文件来击败这两个问题(好吧,你仍然有增加缓存缺失率的风险)…

你有多需要这个? 它存在过早优化的真正风险。 我建议不要在没有迫切需要的情况下触及问题。 真。

考虑为什么你认为你需要并行化,如果你将看到任何实际的性能优势。 你很可能会受到磁盘访问时间的限制,分叉会花费很多。 你最好的选择可能是做一个标准的单线程搜索(可能与正则表达式)。

假设你真的认为这是必要的(或者是这个功课?),一个(相对较高的)路要走:

计算要搜索文件的大小(例如,用fopen,fseek(file,END),fclose)

与每个进程关联文件中的两个偏移量:搜索起始偏移量和搜索结束偏移量:

startIndex = indexOfProcess * fileSize / numberOfProcesses

endindex =(indexOfProcess + 1)* fileSize / numberOfProcesses

你必须考虑到这样一个事实,即要查找的字符串可以通过添加一些重叠(这将是字符串大小的函数)跨越两个或多个进程的切片。

fork,在每个进程中打开文件(在读取模式下),fseek到开始索引,搜索字符串就好像你有一个文件的大小(endindex – startIndex),并将结果转储到屏幕上(或者,如果你有更具体的要求,请告诉我们)。

要么这是作业,要么这是无用的。 瓶颈在于磁盘带宽,而不是cpu功率。 你只会使用同时访问的速度减慢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐