-1

我在 csv 中有一个 5 gb 256 个文件,我需要以最佳速度读取它,然后以二进制形式写回数据。

我做了以下安排来实现它:-

对于每个文件,都有一个对应的线程。我正在使用 C 函数 fscanf,fwrite。但在资源监视器中,它显示不超过 12 MB/秒的硬盘和 100 % Acitve 最高时间。谷歌表示硬盘可以读/写到 100 MB/秒。机器配置是:- Intel i7 Core 3.4。有 8 个核心。

请给我你的看法。我的目标是在 1 分钟内完成这个过程。

** 使用一个线程花了我 12 分钟**

4

1 回答 1

3

如果所有文件都驻留在同一个磁盘上,那么使用多个线程可能会适得其反。如果您并行读取多个文件,HDD 磁头将不断在磁盘的不同区域之间来回移动,从而大大降低吞吐量。

我会测量内置 OS 实用程序读取文件(在 Unix 上,类似ddcatinto /dev/null)然后将其用作基线需要多长时间,记住您还需要将内容写回. 就吞吐量和寻道时间而言,写入的成本可能很高。

然后我会想出一个单线程实现,它以大块的形式读取和写入数据,看看我是否可以让它像操作系统工具一样执行。

PS 如果你有 5GB 的数据并且你的 HDD 的最高原始吞吐量是 100MB,并且你还需要将转换后的数据写回到同一个磁盘上,你 1 分钟的目标是不现实的。

于 2013-10-21T06:09:37.237 回答