0

.NET C#にはタスクとデータの並列処理が組み込まれていることを読みました。4つのコア(Windowsタスクマネージャーの4つのウィンドウ)を備えたコンピューターでプログラムのfor / foreachループを実行すると、ループは4つに均等に分散されます。コア?そうでない場合、for / foreachループがデフォルトで並列の4コアで実行されないのはなぜですか?

一般的に言って、並列処理は従来のプログラミングよりも優れていますか?メリットはデメリットを上回りますか?私は多くのデータ処理(プルの束、for / foreachループ)を行っており、これらのfor/foreachループをより速く完了する必要があります。

4

3 に答える 3

4

4つのコア(Windowsタスクマネージャーの4つのウィンドウ)を備えたコンピューターでプログラムのfor / foreachループを実行した場合、ループは4つのコアに均等に分散されますか?

タスクはコア上で自動的に並列化されるということですか?いいえ。そのためには、Parallel.ForEachなどのタスク並列ライブラリを使用する必要があります。

一般的に言って、並列処理は従来のプログラミングよりも優れていますか?

場合によります。

メリットはデメリットを上回りますか?

場合によります。

私は多くのデータ処理(プルの束、for / foreachループ)を行っており、これらのfor/foreachループをより速く完了する必要があります。

並列化があなたの答えであると推測するのはやめましょう。プロファイラーを取り出して、ボトルネックがどこにあるかを調べます。たとえば、ネットワーク接続を介してデータベースと通信する必要があるために速度が低下する場合、並列化は役に立ちません。ボトルネックがループ内の操作であり、それらの操作が並列化可能である場合に役立つことがあります。

于 2012-05-08T01:18:36.257 に答える
0

並列処理専用の実装があります(@xbonezが述べているように)。

.Net 4.0には、優れた並列ライブラリ(MSDN:TPL)があります。

于 2012-05-08T01:19:58.437 に答える
-2

効率的ではないか、毎回必要とされないため、4コアでは実行されません。

それはあなたのプログラムとあなたのプログラムの負荷に依存します。1ms/サイクルを要しなかった関数を並列化することは効率的ではありません。長時間実行される計算を実行したり、賢明に分割できる大きなデータフィールドを検索したりする場合は、ループを並列化することができます。

そのトピックについては、http://www.amazon.com/Multi-Core-Programming-Increasing-Performance-Multi-threading/dp/0976483246/ref=sr_1_fkmr0_2?ie = UTF8&qid = 1336440123&sr=8-2-fkmr0を読むことをお勧めします

于 2012-05-08T01:23:14.243 に答える