0

現在、私たちのアプリケーションは、同じディレクトリにある 1000 を超える XML ファイルに関する大量のファイルを処理しています。ファイルはすべて読み取られ、解析され、データベースに更新/保存されます。

12 コアのマシンでアプリケーションをテストしたところ、プロセス全体が 4 コアのマシンでの処理よりも大幅に遅くなりました。

私たちが観察したことは、アプリケーションによって生成されたスレッド数が 30 ~ 90 スレッドの範囲にまで増加し、コンテキスト スイッチが大幅に増加していることです。これは、多数の並列実行が生成されていることが原因である可能性がありますが、それらはすべて重要です。

コンテキストスイッチが原因ですか? またはファイルの並列読み取り/書き込み?それとも並列タスクの数を減らしますか?

4

1 に答える 1

1

ここでのボトルネックはディスクアクセスです。開始するスレッドの数に関係なく、ファイル システムは一度に 1 つのファイルしか読み取ることができません。より多くのスレッドを開始しても、この単一のリソースをめぐって競合するだけで、コンテキストの切り替えとディスクのシーク時間の両方が増加します。

一度に 1 つのスレッドしかデータベース内のテーブルを更新できないため、プロセスの反対側にも制限がありますが、データベースは複数のプロセスを処理するように設計されています。

ディスクの読み取りを担当する単一のスレッドを作成し、ファイルが読み取られると、それを処理するスレッドを開始できます。そうすれば、最も効率的な方法でディスクから読み取ることができ、操作のマルチスレッド部分がボトルネックの背後にあります。

于 2013-02-22T10:11:18.923 に答える