3

CD/DVD からのデータの読み取りに少し問題があります。私のプログラム (task.factory/threading を使用) は、ローカル HDD から読み取るときに完全に機能しているようです。基本的には、一連の画像ファイルを列挙して、それらのファイルに関する情報を読み取り、それをテキスト ファイルに書き込むことを目的としています。明らかに、CD からの読み取りはほとんどの HDD などよりもはるかに遅くなりますが、比較すると滑稽なほど遅いです (20 倍以上遅い)。

これは、スレッド化されたプログラムがディスク ドライブ上のデータを読み取ろうとしている方法と関係があるのか​​、それとも何かできることがあるのだろうか? さらに、それが何らかの手がかりである場合、非常に断続的に遅くはないようです(ただし、ディスクからの読み取りよりもはるかに遅いです)。ディスクの読み取り方法や読み取り速度をいじることは可能ですか...私にはわかりません。私のプログラムのこれ以上の詳細は必要ないと思いますが、私が提供できる追加情報があるかどうか尋ねてください.

4

2 に答える 2

4

ディスク IO は (おそらく SSD を除いて) うまく並列化できるものではありません。これは特に(HDD に比べて - SSD に比べて小さい) 帯域幅が低く、シーク時間がかなり長い光学ドライブに当てはまります。一度に複数のスレッドでシークを開始すると...ええ、それは本当に遅くなります。

複数のスレッドがディスクにアクセスすることは避けてください。できることは、データを読み取るための 1 つのスレッドを用意し、それが作業を作業キューにプッシュし、キューから作業を取得して処理するために必要な数のワーカーを待機させることです。これにより、実際の作業を並行して処理できるようにしながら、IO の競合を最小限に抑えることができます。

于 2013-10-21T18:57:31.430 に答える