2009-07-02 6 views
5

マルチコアボックスで実行される高性能で高可用性のサービスを作成することが任されています。マルチコアハードウェアの.NET Frameworkのサポート

タスクParellelライブラリをにする必要がありますか?はマルチコアサーバーを活用していますか、ハードウェア(コア)を追加するとサービスは自動的に高速に実行されますか? .NETフレームワークは私の魔法をカバーしていますか?

TPLを使用しない.NETアプリケーションでは、サーバーをより多くのコア(各コアの仕様を同じに保ちます)をアップグレードすることでパフォーマンスが向上しますか?

私が理解しているように(Joe Duffyの本と彼のブログを見て)、実際にはマルチコアのプログラミングが必要です。私の結論は正確ですか?

答えて

7

これは、並列処理が一般的な問題ではないため、正確に答えることは難しいです。プロジェクトを分析して、並列処理を活用できる場所を見つける必要があります。

アプリケーションを具体的な独立したタスクに簡単に分解できれば、並列処理は確実に向上します。その性質上、主にシリアルの場合、複数のコア/スレッドはまったく役に立たないでしょう。

パラレルタスクがプロセスのコアを表すと判断した場合、パラレルライブラリを使用すると、基本的なタスクを実行するだけでなく、より簡単に実行できるようになります。

+0

ありがとうございました。私のアプリケーションには一定の並列性があり、アプリケーションはマルチスレッド化されます。スレッドを作成するとマルチコアハードウェアを活用できますか?フレームワーク(またはOS)は、別のコアでスレッドを実行できるかどうか、または明示的にそれをプログラムする必要があるかどうかを判断しますか? – Sprash

+1

スレッドだけを使用してください。 OSはコアを利用して処理します。 **これはあまり単純化された応答です。このような大きなプロジェクトに取り組もうとしているのであれば、「Windowsでの並行プログラミング」を読む価値があります。http://www.amazon.com/Concurrent-Programming-Windows-Microsoft-Development/dp/032143482X/ref=sr_1_1?ie = UTF8&s = books&qid = 1246579844&sr = 8-1 –

3

PLinqをご覧ください。これは、.NET 4.0になります。タスク/ロードアルゴリズムを管理することなく、多くの並列処理機能を提供します。

+0

はい、私は熱心にPLinqと.NET 4.0を待っています。彼らはこの分野でかなりの広範な作業を行ってきました。残念ながら、私は生産のためのフレームワークのアルファ版を危険にさらすことはできません – Sprash

1

1つ以上のコア/プロセッサを利用するには、プログラムに複数の実行パスが必要です。これは、1つ以上のスレッドを実行することによって実行されます。ほとんどのOSでは、実行パスを複数提供する唯一の方法は、複数のプロセス(実行可能ファイル)または1つのプロセス内の複数のスレッドを実行することです。

本質的にマルチスレッドであることをより簡単に処理するために、現代の言語にはいくつかの高レベルの抽象化が組み込まれていますが、 Threads

+0

はい、私のアプリケーションは、最も確かにマルチスレッドになります。スレッドを作成するだけでマルチコアハードウェアを活用できますか? – Sprash

+0

実行したいコードを分割して、複数のスレッドで実行してからyesにすると、OSは異なるコア上でスレッドを実行します。 もちろん、マルチスレッドは非常に慎重に行う必要があります。レースの終結、デッドロック、データの不一致などで終わらないようにする必要があります。 – nos

関連する問題