2

ある店で、ある重役がクライアント A にサービスを提供しているとします。今度は、同じ重役がクライアント B に向かい、しばらくの間、C にサービスを提供し、次に A にサービスを提供するという具合です。

さて、ここで、全体の実行時間は同じです。つまり、A + B + C 時間 = A の時間 + B の時間 + C の個別の時間です。

このタイミングの側面については、正当な理由がわかりません。しかし、なぜ非同期が非常に重要視されるのでしょうか? 特に電子製品開発ソフトウェアでは?非同期プログラミングのばかげた質問のために面接に落ちました。:(

誰か説明できますか?非同期プログラミングの本の定義は知っていますが、実際にはそれを適用できる場所に満足したいと思っています。

4

5 に答える 5

2

非同期プログラミングには、次の 2 つの主な利点があります。

  1. (クライアント側で) 応答性。何らかの操作が完了するのを待つ UI スレッドをブロックする代わりに、ユーザーへの応答性を維持できます。
  2. (サーバー側) スケーラビリティ。何らかの操作が完了するのを待っているスレッドをブロックする代わりに、待機中に他の要求に対して動作させることができます。

また、非同期プログラミングは、マルチスレッドとは関係のない形式の同時実行を可能にします。たとえば、いくつかの操作を簡単に開始し、(非同期で) すべての操作が完了するのを待つことができます。これは、従来のマルチスレッド (並列処理) よりも簡単で、エラーが発生しにくく、スケーラブルです。

于 2013-07-14T17:59:09.663 に答える
2

あなたの例では、同期プログラミングは、クライアントAが注文を行い、店員が注文を完了するのを待ち、次にクライアントBが注文を出し、完了を待つときです。事務員が複数いる場合でも、クライアントはまだ完了を待っています。

非同期とは、クライアント A が注文を行い、店員が「OK、完了します。今すぐ行くことができます」と言い、クライアント Aがすぐに満足して立ち去り、店員が他の人に仕事を依頼し、すぐにクライアント B に頼る、などです。 .

全体的な実行時間は似ていますが、タスクがすぐに確認され、おそらく他の誰か (別のスレッド、スレッド プール、キュー) によって後で実行されるため、待機時間は短くなります。

于 2013-07-14T17:52:42.037 に答える
1

良い。インターネットから 2 つのファイルをダウンロードするとします。10 メガバイト/秒のダウンロード容量があります。(別々のサーバーから) ダウンロードする 2 つのファイルのアップロード容量は、それぞれ 1 Mb/s です。ファイル A をダウンロードしてからファイル B をダウンロードするか、ファイル A と B の両方を「同時に」ダウンロードするのが最適ですか? CPU のデータ処理の合計時間が同じであっても、より速く終了します。

特に IO バウンド操作には多くの待ち時間があります。その時間は、ただ待つよりも、他のことに費やすほうが有効です。

または、お客様のシナリオを好む場合。顧客が購入するのは、あなたのタクシーでの旅行だとしましょう。スレッド対応の車を 2 つに分割し、両方の顧客を同時に運転する方が、一方を運転してからもう一方を運転するよりもはるかに高速です。分割ドライバーが同じ量の総作業を行う必要がある場合でも。

于 2013-07-14T17:44:02.807 に答える
1

あなた自身の例を挙げると、すべての顧客がお金を引き出したり、何かに署名したり、何か他のものを読んだりするために、5 秒間の一時停止を数回行う必要があると想像してください。

店員が顧客を待っている場合、店員は多くの時間を無駄にしていますが、その 5 秒間に別の顧客に切り替えて、別の取引を開始/続行できます。

非同期処理は、別の処理を待機することで無駄になっていた時間を再利用できるため、優れた機能です。プログラミングでは、これらの他のことは通常、ディスク/ネットワーク I/O または長いバックグラウンド タスクです。

于 2013-07-14T17:46:16.700 に答える