24

非同期プログラミングは、メソッドを呼び出して結果を待たないコードブロックを非同期的に実行する方法であるため、混乱しています。同様に、並列プログラミングは複数のタスクを同時に実行する方法ですが、それらのタスクはすべて非同期で実行されます。C#でのこれら2つのプログラミングパラダイムの関係は何なのか疑問/混乱しています。

4

6 に答える 6

31

並列プログラミングは、複数のスレッドを使用してタスクをより高速に実行する手法です。これは、最新のマルチコア アーキテクチャでは、タスクを実行するために利用可能なリソースをより多く利用できることを意味します。

この良い例は、クイックソートを使用してリストをソートすることです。

通常、並列プログラミングではパフォーマンスが重要であり、すべてのスレッドが共通の目標に向かって動作します。

非同期プログラミングは微妙に異なります。これには通常、実行時間の長いタスクや、おそらく何らかの外部刺激を待っているタスクが含まれます。この良い例は、バックグラウンド スレッドで大規模な計算を実行して、UI の応答性を維持することです。非同期コードでは、通常、メイン アプリケーションとは異なる速度で実行されるコードについて話します。

于 2012-09-15T04:14:59.813 に答える
16

並列プログラミングとは、複数のスレッドを使用して同時に操作を実行することを意味し、CPU やコアを処理します。

あなたが言った非同期プログラミングとは、リクエストを起動し、レスポンスを受信するためのコールバックメカニズムを提供することを意味します。

于 2012-09-15T04:15:14.233 に答える
7

一般に、非同期は可能な限り実行することを意味し、並列は新しい実行スレッドを作成してすぐに実行することを意味します。
ここにリンク

于 2012-09-15T04:14:42.833 に答える
1

並列および非同期プログラミングを理解するための最も簡単な方法の 1 つは、スレッドを組み込むために少し変更した Pluralsight の「卵をゆでる」シナリオを考えることでした。

並列プログラミング

  • ホブ:CPU
  • 複数のポット: スレッド
  • 複数の卵: 並列タスク

同時にゆでる必要がある複数の卵 (タスク) があります。この例では、コンロが CPU になり、1 つの卵をゆでている各鍋が 1 つのスレッドになり、卵が並列タスクになります。ホブ (CPU) に複数のポット (スレッド) を同時に追加することで、複数の卵 (タスク) をゆでることができます。並列プログラミングを使用しないと、一度に 1 つの卵 (タスク) しかゆでることができません。これは、作業するポット (スレッド) が 1 つしかないため、最終的に卵をゆでるプロセスが遅くなるからです。

非同期プログラミング

  • Egg Timer: 非同期タスク
  • ホブ:CPU
  • 複数のポット: スレッド
  • 複数の卵: タスク

上記の例に続いて、各卵がいつ沸騰し終わったかではなく、すべての卵がいつ沸騰したかだけを知りたいと判断します。これを行うには、このインスタンスでエッグ タイマーとして再生される非同期タスクを使用します。エッグ タイマー (非同期タスク) は、すべてのエッグ (タスク) が完了すると更新されるため、この時点まで他のことを自由に行うことができます。

于 2017-09-06T11:26:44.590 に答える