从CD / DVD读取速度与枚举/线程相比非常慢

时间:2013-10-21 18:53:12

标签: .net multithreading performance enumeration cd

从CD / DVD读取数据时遇到一些问题。从本地硬盘读取时,我的程序(使用task.factory / threading)似乎完全正常。它基本上用于枚举一堆图像文件,以读取有关这些文件的信息并将其写入文本文件。显然,从CD读取比大多数硬盘驱动器等要慢得多,但相比之下它的速度非常慢(超过20倍)。

我想知道这是否与线程程序试图读取光盘驱动器上的数据的方式有关,和/或是否有任何我可以做的事情?此外,它非常间歇性地似乎没有那么慢(但仍然比从磁盘读取慢得多),如果这是一个线索。有可能摆弄磁盘的读取方式或读取速度还是......我甚至都不知道。我不认为我的计划有任何更多细节是必要的,但是如果有任何其他信息我可以提出。

2 个答案:

答案 0 :(得分:4)

磁盘IO不能很好地并行化(除了可能在SSD上) - 这在光驱上是尤其是真的,它具有较低的(与HDD相比 - 与SSD相比很小)带宽,以及非常巨大的寻求时间。如果你一次开始寻找多个线程......是的,那将非常慢。

尽量避免让多个线程访问磁盘。你可以做的是有一个线程来读取数据,然后将工作推送到工作队列中 - 然后你需要等待从队列中获取工作并处理它的工作人员。这将最大限度地减少IO争用,同时仍允许并行处理实际工作。

答案 1 :(得分:4)

光驱是CLV驱动器,包含线速度。这使得他们非常擅长在磁盘上打包大量数据。但这有一个巨大的缺点,将读头移动到另一个轨道非常慢。它还需要改变磁盘的旋转速度。回放电影时不是问题,当你需要随机访问时,这个问题很大。

规则排名第一的磁盘驱动器具有非常慢的寻道时间:从不使读取器头移动,如果你可以避免它。

调用规则2:从不使用多个线程从这样的驱动器读取。由于每个线程都会将读取头发送到它正在读取的轨道。来回,寻求使它非常慢。

与普通硬盘一样,使用多个线程毫无意义,他们只是轮流让驱动器为其请求提供服务。线程只能在多核处理器上为您购买更多的CPU周期。所以只能使用一个线程来阅读。