複数のコア用に最適化する必要があるアプリケーションを C# で作成しました。私はいくつかのスレッドを持っています。もっとやるべきですか?
詳細を更新しました
- C#2.0
- Windows Vista および Windows Server 2003 で実行
再更新
- このコードはサービスとして実行されています
- 完全なコードは必要ありません...ここでの私の目標は、あなたの経験と開始方法を取得することです。私が言うように、私はすでにスレッドを使用しています。これ以上何ができますか?
複数のコア用に最適化する必要があるアプリケーションを C# で作成しました。私はいくつかのスレッドを持っています。もっとやるべきですか?
詳細を更新しました
再更新
高度に最適化されたマルチスレッド プロセスを作成することは、いくつかのスレッドを混在させるよりもはるかに難しいことを一般化します。
次の手順から始めることをお勧めします。
マルチスレッド バージョンは、同じアプリのシングルスレッド バージョンよりもパフォーマンスが低下する可能性があることに注意してください。優れた工学的測定に言い訳はありません。
Herb Sutter のコラム「Effective Concurrency」を読むとよいでしょう。これらの記事は、他の記事とともにここにあります。
.NET の並列拡張機能を確認することをお勧めします。
複数のコアをより効率的に利用できるようにするには、作業を並列実行できる部分に分割し、スレッドを使用して作業をコアに分割する必要があります。スレッド、バックグラウンド ワーカー、スレッド プールなどを使用できます。
C# の場合は、LINQ のやり方を学び始めてから、Parallel LINQライブラリとその .AsParallel() 拡張機能を利用します。
解決しようとしている問題の並列処理(または並列処理の可能性)を理解することは、スレッドの同期やライブラリなどの詳細よりも、アプリケーションとそのアルゴリズムの方がはるかに重要です。
並列プログラミングのパターン(「並行性の発見」とより高いレベルの設計の問題に焦点を当てています)を読むことから始め、次にマルチプロセッサープログラミングの芸術(理論的基礎から始まる実用的な詳細)に進みます。