web-dev-qa-db-ja.com

「非同期イベント」の定義を理解しやすい?

私はこの用語に何度も出会ったことがあり、グーグルの後でも、それが正確に何を意味するのか理解できません。誰かが提供できる非同期イベントとは何かについて、(理想的には例で)わかりやすい定義がありますか?

ありがとう!

88
jasonbogd

プログラミング以外の例:

同期夕食にピザが必要で、冷凍の種類がありません。したがって、ギルドを混乱させるWOWのプレイを停止する必要があります。キッチンに行き、生地を作り、ソースで覆い、チーズを加え、お気に入りのベーコンをトッピングします。オーブンでさらに10分間、ピザを作るのに20分費やしました。タイマーがビープ音を鳴らし、ホットパイを引き出します。コンピューターの前に座ってピザを食べ、襲撃を続けることができます。

非同期 WOWのプレイ中に夕食にピザが必要です。 5番目のモニターでブラウザーウィンドウを開きます。あなたはピザのウェブサイトをロードし、追加の安っぽいベーコンピザとベーコングリースガーリックソースを注文します。レイドに戻り、20分後にドアのベルが鳴ります。あなたはピザを手に入れます。コンピューターの前に戻ってピザを食べ、襲撃を続けます。

それで、違いは何ですか? 1つの方法は20〜30分の貴重なWOW時間を無駄にし、もう1つの方法は20ドルとチップを無駄にします。

423
epascarello

あなたのページは、サーバーからインターネットのどこかにあるクライアントブラウザに配信されます。ブラウザーはページを画面に描画し、誰かが(またはthing)誰かがそれを見ています。それは待っているゲームです。目は前後に移動し、この詳細をすばやくジャンプして取り込み、時々画面の外側に向かって走り、環境の気を散らすものを調べます。時計が刻みます。ユーザーが非アクティブな状態でホバリングし、マウスを手でゆるく垂らし、首を曲げて、ページが提供するものを誘うものに目を向けるにつれて、ページは柔らかく、受動的に輝きます。

突然、まったく警告が表示されずに、マウスの手が少し硬くなるとカーソルが動き始め、テーブルの粗い表面の小さなプラスチックの突起を少しずつ動かし始めます。マウスが動くと、画面上のサロゲートが密接に模倣して動き、ページのコンテンツで過去の興味深い画像や気の利いた発言を放牧します。最終的に決定が行われ、動きが一時停止し、筋肉または2つがわずかに収縮し、マウスボタンがしつこい指で押し下げられます。マウスのマイクロスイッチは電子インパルスをトリガーし、突然ブラウザーはマウスクリックの発生を認識します。

そのすべてにおいて、ユーザーがページを注視している間に実行したことはすべて、ブラウザー、Webページのクライアントコード、サーバーに常駐するものに対してまったく予測できない方法で行われました。人間の行動の間に「待機時間」はありませんでした。したがって、ユーザーのコンピューターにフックされた機器によって送信されるアクションは、発生しました発生したときであり、予測可能なクロックに従ってではありません-つまり、発生しました非同期

19
Pointy

インタビューの終わりを考えてください。彼らは「電話しないで、電話します」と言います。それが非同期イベントの本質です。

通常、関数を定義し、関数を明示的に呼び出します。プログラムは、1行目から2行目から始まる構造を持ち、一部の条件付きコードと反復、関数の呼び出しなどを除いて、単純なライナーの同期構造があります。

ただし、場合によっては、プログラムの直接制御外のイベント、ユーザーインターフェイスイベント(ユーザーがマウスをクリックする)またはネットワークイベント(誰かが接続しようとするなど)サーバー)。コードはこれらのイベントを直接生成しません。多くの場合、ユーザーインターフェイスデバイスや他のシステムの監視に基づいてOSによってプログラムの外部で生成されます。これらは非同期イベントと呼ばれます。

「電話しないでください、電話します」

18
Rob Weir

非同期イベントは、アプリケーションのメインスレッドの外部で実行されるイベントです。

理解する最良の方法は、同期して実行されるイベントと比較することです。最も典型的な例は、Webページの読み込みです。

このページに移動したとき、リンクをクリックして、ページがロードされるのを待ち、ロードが完了するまでこのページと対話したり使用したりできませんでした。対照的に、このページに何らかのユーザーアクションに関連付けられたAJAXイベント(非同期JavaScriptおよびXMLイベント)がある場合、このページは別のソースからのデータを非同期に(理論的には)他のアクションが実行されている場合。

2つの同期イベント(AおよびB)の例:最初のAは何かをします。 Aが終了すると、Bは何かをします。

2つの非同期イベント(AおよびB)の例:AとBの両方が同時に何かを実行し、どちらのイベントも他方を待機しません。

12
chaimp

「プログラミングでは、非同期イベントとは、メインプログラムフローとは無関係に発生するイベントです。非同期アクションとは、ノンブロッキングスキームで実行されるアクションであり、メインプログラムフローが処理を続行できるようにします。」

「Ajaxを使用すると、Webアプリケーションは、既存のページの表示や動作を妨げることなく、バックグラウンドで非同期的にサーバーからデータを取得できます。」

[編集]をクリックしてSOで保存)が非同期に発生しています。

12

JavaScriptの非同期操作の例を次に示します(JavaScriptコンソールを開いておく必要があります)

_console.log('One!');
setTimeout(function(){console.log('Two!');},0);
//Doesn't wait
console.log('Three!');};

//OUTPUT:
//One!
//Three!
//Two!
_

console.log('Two!')への呼び出しは、その後に発生する残りのコードをブロックせずに実行されます。

実際のシナリオでは、Webページ上のボタンをクリックする人にsetTimeoutを置き換えます。ボタンのクリックに対する応答は、ページレンダリングなどの他のコードの実行をブロックすることなく、最終的に発生します。

7
statenjason

簡単に言えば、それは未知の時間の後に発生する何かを意味するので、即座の結果を期待しないでください。

たとえば、「ママ、5ドルでもらえますか?」

お金のために手を出すと、彼女はすぐにお金をくれて(同期)応答することを期待しています。

現実的には、彼女はしばらく私を見てから、(非同期で)やりたいときに応答することにします。

5
Kai

2つの異なるイベントが互いに別々に発生するため、できない

task1
task2

それをチェックせずにtask1本当に完成しました。

2
Teson

非同期イベントとは、たとえば、あるファイルに対してサーバーが要求されたときなど、将来いつ発生するかわからないイベントです。リクエストをいつ満たすかわからないときや、ユーザーがいつになるかわからないUIイベントボタンまたは他のUI要素をクリックしますが、それにもかかわらずページまたはアプリケーション上の他のことが起こっても、サーバーからのファイルが来ないか、何らかのイベントが起こるまでページがすべてのUIをグレーアウトすることをブロックしませんこれは非同期イベントの力です。単純に独立したイベントと言います

1
blackHawk

コードが同期(または同期)の場合、各コードが順番に順番に実行され、次のコードは前のコードが完了するまで実行できないことを意味します。通常、ほとんどのコードは同期的です。

コードが非同期(または非同期)の場合、コードは他のコードとは独立して独立して実行できることを意味します。この特定の質問のコンテキストで、同期コードの束の中に非同期コードがある場合、非同期コードは、同期コードのどこに配置しても、イベントがトリガーされたときにのみ実行されます。同期コードとは完全に独立しており、前のコードの実行が完了したときだけでなく、イベントが指示するたびに実行されます。これのいくつかの例は、ファイルが正常に保存された後、Webリクエストが送信された後、ユーザーがボタンをクリックしたとき、または画像が読み込まれた後、一定の間隔で実行されるコードです。

0
Grant Gryczan

同期対非同期イベント

一部のイベントハンドラは、イベントが発生するとすぐに呼び出されます。これらは「同期」イベントと呼ばれます。例はDocumentNewです。ユーザーが新しいドキュメントを作成するとすぐに呼び出されます。

ただし、一部のイベントは、イベントが発生した直後、通常は短時間のアイドル時間後に呼び出されます。これらは「非同期」イベントと呼ばれます。イベントが発生した正確な時間にユーザー作成のマクロが呼び出されると、Source Insightが不安定になるため、これらは非同期です。

0
Vitthal Walunj