我一直在研究一个项目,新的要求是将128个文件并行加载到物理内存中。所有这128个文件都驻留在同一目录/文件夹中。是否有可用于解决此问题的算法或解决方案?我需要用C ++编写代码。
答案 0 :(得分:7)
按顺序加载128个文件的最快方法。并行性不起作用,因为磁盘头一次不能存在于多个位置。即使是随机存取存储设备(如SSD)或磁盘的DRAM缓存,它们仍然必须顺序通过总线。
读完之后,它们肯定可以并存在内存中。
我建议使用for循环来检查文件大小,分配内存和读取每个文件。循环将迭代128次。当您获得每个文件时,您可以与后续读取并行地开始数据处理。
并行计算可以加快速度,因为您拥有多核处理器。重叠的网络请求可以加快速度,因为往返延迟很长。 只有当您有多个磁盘时,并行磁盘I / O才能加快速度,并且数据之间会有适当的分配。您的不是。 (如果您使用RAID条带集,则磁盘控制器将发出并行读取,而您的应用程序无需额外工作)
如果您的经理坚持“它必须并行读取,有必要”,开始谈论128个磁盘阵列,使用花哨的覆盖系统使128个磁盘上的文件看起来好像在同一个目录中
此后要求应该更加合理。
答案 1 :(得分:1)
虽然我完全同意Ben Voigt的回答,如果你真的想要这样做(如果没有别的,向你的管理层证明它不值得做),那么解决方案是:< / p>
我几乎可以保证,除非你有一些非常奇特的硬件,即使是并行的4个文件,除非文件很小,否则这个解决方案比顺序进程慢。