2012-03-11 80 views
0

我有一个Parallel.Foreach循环在同一组大数据文件中创建二进制读取器
我只是想知道这是否会损害这些读者以并行方式读取相同文件的性能(即,如果他们专门阅读不同的文件将它走得更快)
我问,因为有很多的参与(我猜的I/O磁盘访问......)并行并行二进制读取器

编辑:我忘了提:我正在使用Amazon EC2实例,数据位于分配给它的C:\ Disk上。我不知道它是如何影响这个问题的。

编辑2:我会让测量复制数据文件夹,并从2个不同来源的阅读,看看它给。

+1

我想像的答案会是和我一样是[这里](http://stackoverflow.com/questions/8470306/multithreaded-file-compare-performance)。 – 2012-03-11 21:54:28

回答

3

使用多个线程从同一磁盘读取这不是一个好主意。由于磁盘的机械头需要每次旋转以寻找下一个读取位置,因此基本上它会绕多个线程弹跳,从而损害性能。

最好的方法实际上是使用单个线程顺序读取文件,然后将块移交给一组线程以并行处理它们。

+0

这是非常坏消息我的朋友。我必须重新编写整个应用程序核心:(((( – 2012-03-12 13:13:49

+0

请参阅编辑... – 2012-03-12 13:15:38

+0

不会真的改变任何东西如果它是一个单一的机械磁盘,你不应该期望从多线程读取任何加速 – Tudor 2012-03-12 15:21:17

2

这取决于你的文件在哪里。如果您使用的是一个机械硬盘,那么不会 - 不会同时读取文件,这会损害性能。你可能有其他的配置,虽然:

  • 在单个SDD,并行读取文件基本上不会影响性能,但是我不希望你会得到什么。
  • 在使用RAID 1和半正式RAID控制器的两个镜像磁盘上,您可以一次读取两个文件并获得相当的性能。
  • 如果您的文件存储在SAN上,您可以一次只读几个文件并提高性能。

    你也来试试吧,但你必须要小心这一点 - 如果文件不够大,操作系统的缓存机制将影响你的测量,以及第二测试跑将是非常快。

+0

I我正在使用Amazon EC2 Cloud Instance ... – 2012-03-12 13:16:07

+0

哦!那么一定要试着平行阅读,你可能会感到惊讶。 – zmbq 2012-03-12 16:26:41