我有一些大文件(从几千兆字节到几千千兆字节),我正在搜索并试图找到给定字符串的每一个出现.
我一直在考虑让它并行运行并有一些问题.
我该怎么做?我不能将整个文件复制到内存中,因为它太大了.多个FILE*指针会起作用吗?
在磁盘带宽成为限制因素之前,我可以在文件上放多少个线程,而不是CPU?我该如何解决这个问题?
目前,我在想的是我将使用4个线程,每个都使用FILE*以0%,25%,50%和75%的方式通过文件,并将每个结果保存到文件或内存,然后收集结果作为最后一步.虽然采用这种方法,但根据带宽,我可以轻松添加更多线程,并可能获得更大的加速.
你怎么看?
编辑:当我说内存带宽时,我实际上是指磁盘I/O. 对于那个很抱歉.
有了这个问题的新修订版,答案就是"几乎立即".硬盘不是很擅长同时从磁盘上的两个位置读取.:)如果你有多个硬盘驱动器并将文件分割成它们,你可能会利用一些线程.但公平地说,我会说磁盘速度已经是限制因素了.我非常怀疑您的磁盘能够以比处理器处理数据更快的速度读取数据.