「非同期イベント」の定義がわかりやすい?[閉まっている]


88

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

ありがとう!

回答:


422

非プログラミングの例:

同期 あなたは夕食にピザを欲しがっており、あなたは凍りついた種類の外にいます。だからあなたはあなたのギルドを混乱させるWOWのプレイをやめなければなりません。あなたは台所に行き、生地を作り、それをソースで覆い、チーズを加え、そしてそれをあなたの好きなベーコンのトッピングに塗ります。オーブンで20分の時間を費やして、さらに10分の時間でピザを作りました。タイマーがビープ音を鳴らし、ホットパイを引き出します。コンピューターの前に腰を下ろしてピザを食べ、襲撃を続けることができます。

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

違いは何ですか?1つは貴重なWOW時間を20〜30分無駄にする方法で、もう1つは$ 20プラスチップを無駄にする方法です。


53
私はこれがとても面白いと思って悲しいです。
Denis Hoctor 2011

3
これは私が長い間見た中でプログラミング以外の最高の説明かもしれないと認めなければなりません!素晴らしい例!
Iban Dominguez Noda

私はそれを理解し、この答えはそれを理解するのに役立ちますが、私は今ピザが欲しい= /と私がピザを手に入れるまでリクエストは続きません-_-
JMASTER B

私は「非プログラミング例」が大好きです!!
シンシアサンチェス

@epascarello面白い面は本当にうまくいく!言うまでもなく、理解するのは明らかです。プロジェクトのためにあなたを引き留める必要があります
Omar

19

ページがサーバーからクライアントブラウザに配信されます。インターネットのどこかにあります。ブラウザは、画面上でページを集めている、と誰か-あるいはいくつかの事が -それを見ています。それは待っているゲームです。目は前後にシフトし、これまたはその詳細をクイックジャンプで取り込み、時々画面から遠ざかり、環境の気晴らしを調査します。時計が刻みます。ページが柔らかく、受動的に輝きます。ユーザーが非アクティブになっていると、手がマウスにゆるくドレープされ、首が曲がり、目がページの魅力的なものにますます集中します。

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

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


3
+1素敵な話:)とても魅力的です...マウスを動かして「上向き投票」矢印をクリックしました。そして、ここで非同期イベントが....再び
フェリックスクリング

1
良い例、ブラウザイベントの選択は単に素晴らしいです!
sjsam 2015年

18

インタビューの終わりを想像してみてください、彼らは「私たちに電話しないでください、私たちはあなたに電話します」と言います。これが非同期イベントの本質です。

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

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

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


12

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

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

SOで[編集して保存]をクリックすると、非同期で発生します。


12

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

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

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

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

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


7

これは、JavaScriptの非同期操作の例です(JavaScriptコンソールを開いておく必要があります)。

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

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

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

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


5

簡単に言えば、それは未知の時間の後に起こる何かを意味するので、すぐに結果が出るとは期待しないでください。

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

お金のために私の手を出すことは、彼女に私にお金を与えることによって即座に応答することを期待しています(同期)。

現実的には、彼女は1、2分間私を見て、必要なときに(非同期で)応答することにします。


2

2つの異なるイベントが別々に発生するため、実行できません

task1
task2

task1本当に終わったことを確認せずに。


1

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


0

同期対 非同期イベント

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

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


0

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.