17

非同期メソッドとは。私は知っていると思いますが、並列処理と混同し続けています。非同期メソッドと並列処理の違いがわかりません。

また、スレッド化クラスと非同期クラスの使用の違いは何ですか?

編集

非同期、スレッド化、および並列処理の違いを示すコードが役立ちます。

4

4 に答える 4

25

非同期メソッドとは

時間のかかる可能性のある操作について話しているときに、非同期メソッドが話題になります。通常、プログラムの実行を有意義に続行するには、このような操作を完了する必要がありますが、操作が完了するまで「一時停止」したくはありません (一時停止は、UI が応答を停止するなど、明らかに望ましくないことを意味する可能性があるためです)。

非同期メソッドは、時間のかかる操作を開始するために呼び出すメソッドです。メソッドは、処理の遅延がないように、操作を開始して「非常に迅速に」返すために必要なことを行う必要があります。

非同期メソッドは通常、操作がまだ完了しているかどうか、およびその結果が何であったかを照会するために呼び出し元が使用できるトークンを返します。場合によっては、引数としてコールバック (デリゲート) を取ります。操作が完了すると、コールバックが呼び出されて、呼び出し元に結果の準備ができたことを通知し、それらを返します。これは一般的に使用されるコールバック シグネチャですが、もちろん一般的に、コールバックはどのようなものでもかまいません。

では、誰が実際に時間のかかる操作を実行しているのでしょうか?

上記で、非同期メソッドが長さ操作を開始すると言いましたが、このコンテキストで「開始」とはどういう意味ですか? メソッドはすぐに戻るので、実際の作業はどこで行われているのでしょうか?

一般に、実行スレッドはプロセスを監視し続ける必要があります。一時停止するのは非同期メソッドを呼び出したスレッドではないので、誰が一時停止しますか? 答えは、マネージド スレッド プールからこの目的のために選択されたスレッドです。

スレッドとの関係は何ですか?

このコンテキストでの「スレッド化」の私の解釈は、単に、独自のスレッドを明示的にスピンアップし、それをデリゲートして問題のタスクを同期的に実行することです。このスレッドはしばらくの間ブロックされ、操作が完了すると、おそらく「メイン」スレッド (実行を自由に続行できる) に通知されます。

この指定されたワーカー スレッドは、スレッド プールから取り出される可能性があります(注意: スレッド プール スレッドで非常に長い処理を行うことはお勧めしません!) または、この目的のためだけに開始したものである可能性があります。

于 2013-04-18T13:08:49.690 に答える
20

まず、メソッドとは何か、スレッドとは何か。メソッドは、(1) ファイルへの書き込みなどの有用な副作用を実行するか、(2) フラクタルのビットマップの作成などの結果を計算する作業の単位です。スレッドは、その作業を実行するワーカーです。

メソッドを使用するために (副作用または結果を取得するために)、スレッドは、作業の実行を要求した時点から完了した時点まで、他に何もする必要がない場合、メソッドは同期的です。

スレッドがメソッドに作業を行う必要があることを伝え、メソッドが「OK、それを行います。終了したら電話します」と言う場合、そのメソッドは非同期です。

通常、非同期メソッドが行う方法は、別のワーカーを作成することです。つまり、プールからスレッドを取得します。これは、メソッドが CPU を大量に使用する必要がある場合に特に当てはまります。しかしいつもではない; 非同期メソッドが別のスレッドを起動する必要はありません。

それは理にかなっていますか?

于 2013-04-18T13:57:47.983 に答える
1

まず、並列処理が必要な場合は、すべての構造が並列である必要があることを理解する必要があります。つまり、非同期メソッドがある場合は、非同期呼び出しが必要です。Web サービスまたは Web スタッフでは、非同期メソッドは (多くの方法の 1 つにすぎません) 非同期である AJAX で呼び出すことができます。1 つのメソッドで複数のスレッドを使用できます。これが、非同期メソッドとマルチプライ スレッドの主な違いです。主な点: 標準メソッドと非同期メソッドの違いは、非同期呼び出し元 (AJAX など) を使用して同じコントローラーに対して標準メソッドを同時に 2 回呼び出すと、最初の呼び出しが行われたときに 2 回目の呼び出しが開始されることです。呼び出しは既に完了しています。呼び出したメソッドが非同期の場合、両方の呼び出しが同時に開始されます。マルチコア サーバーでは、標準速度の 2 倍 (2 呼び出し) を達成できます。並列処理の速度はこれで測定されます法律

于 2013-04-18T13:12:10.143 に答える