并行并发二进制读取器

时间:2012-03-11 21:52:41

标签: c# multithreading

我有一个Parallel.Foreach循环在同一组大型数据文件上创建二进制读取器 我只是想知道这些读者是否正在以平行时尚的方式阅读相同的文件会损害性能(即,如果他们只是阅读不同的文件,它会更快吗?)
我问,因为涉及很多I / O磁盘访问(我猜......)

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

编辑2:我将进行测量,复制数据文件夹并从2个不同来源读取,看看它给出了什么。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

取决于文件的位置。如果您使用的是一个机械硬盘,那么不 - 不要并行读取文件,这会损害性能。但是,您可能有其他配置:

  • 在单个SDD上,并行读取文件可能不会影响性能,但我不指望你会获得任何收益。
  • 在使用RAID 1和半合适RAID控制器的两个镜像磁盘上,您可以同时读取两个文件并获得相当大的性能。
  • 如果您的文件存储在SAN上,您一定可以一次阅读一些文件并提高性能。

    你必须要尝试它,但你必须小心这一点 - 如果文件不够大,操作系统缓存机制将影响你的测量,第二次测试运行将是真的快。