我有一个几行文本文件,我正在寻找在这个文件中的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] 举报,一经查实,本站将立刻删除。