私はこの用語に何度も遭遇しましたが、グーグルの後でさえ、それが正確に何を意味するのかまだ理解できません。誰かが提供できる非同期イベントとは何かについて理解しやすい(理想的には例を示す)定義がありますか?
ありがとう!
回答:
非プログラミングの例:
同期 あなたは夕食にピザを欲しがっており、あなたは凍りついた種類の外にいます。だからあなたはあなたのギルドを混乱させるWOWのプレイをやめなければなりません。あなたは台所に行き、生地を作り、それをソースで覆い、チーズを加え、そしてそれをあなたの好きなベーコンのトッピングに塗ります。オーブンで20分の時間を費やして、さらに10分の時間でピザを作りました。タイマーがビープ音を鳴らし、ホットパイを引き出します。コンピューターの前に腰を下ろしてピザを食べ、襲撃を続けることができます。
非同期 WOWをプレイしながらディナーにピザが欲しい。5番目のモニターでブラウザーウィンドウを開きます。あなたはピザのウェブサイトをロードし、ベーコングリースガーリックソースのサイドで余分な安っぽいベーコンピザを注文します。あなたは襲撃に戻り、20分後にドアのベルが鳴ります。あなたはピザを手に入れます。コンピュータの前に腰を下ろし、ピザを食べ、レイドを続けます。
違いは何ですか?1つは貴重なWOW時間を20〜30分無駄にする方法で、もう1つは$ 20プラスチップを無駄にする方法です。
ページがサーバーからクライアントブラウザに配信されます。インターネットのどこかにあります。ブラウザは、画面上でページを集めている、と誰か-あるいはいくつかの事が -それを見ています。それは待っているゲームです。目は前後にシフトし、これまたはその詳細をクイックジャンプで取り込み、時々画面から遠ざかり、環境の気晴らしを調査します。時計が刻みます。ページが柔らかく、受動的に輝きます。ユーザーが非アクティブになっていると、手がマウスにゆるくドレープされ、首が曲がり、目がページの魅力的なものにますます集中します。
突然、何の警告もなく、マウスの手が少し固まるとカーソルが動き始め、テーブルの粗い表面の上にある小さなプラスチック製の突起をつかみ始めます。マウスが動くと、画面上のその代理が模倣して動き、ページのコンテンツ内の興味深い画像や気の利いた発言を放牧します。最終的に決定が行われ、動きが一時停止し、筋肉または2つがわずかに収縮し、しつこい指でマウスボタンを押します。マウスのマイクロスイッチが電子インパルスをトリガーし、突然、ブラウザーは何が起こっているのかを認識させられます:マウスのクリック。
それでも、ユーザーがページを見ている間に行ったすべてのことは、ブラウザー、Webページのクライアントコード、サーバーに常駐しているものにはまったく予測できない方法で起こりました。人間の行動の間に、知られている「待ち時間」はありませんでした。したがって、ユーザーのコンピューターに接続された機器によって送信されるアクションは、予測可能なクロックではなく、発生時に発生しました。つまり、非同期に発生しました。
インタビューの終わりを想像してみてください、彼らは「私たちに電話しないでください、私たちはあなたに電話します」と言います。これが非同期イベントの本質です。
通常、関数を定義し、関数を明示的に呼び出します。プログラムは1行目から始まり、2行目から始まる構造になっています。条件付きコードと反復、関数の呼び出しなどを除いて、単純なライナー同期構造があります。
ただし、場合によっては、プログラムの直接制御外のイベント、ユーザーインターフェイスイベント(ユーザーがマウスをクリックする)やネットワークイベント(誰かがサーバー)。コードはこれらのイベントを直接生成しません。これらは、プログラムの外部で生成されることが多く、多くの場合、ユーザーインターフェイスデバイスや他のシステムの監視に基づいてOSによって生成されます。これらは非同期イベントと呼ばれます。
「電話しないでください。電話します」
「プログラミングでは、非同期イベントはメインプログラムフローとは独立して発生するイベントです。非同期アクションは、非ブロックスキームで実行されるアクションであり、メインプログラムフローが処理を続行できるようにします。」
「Ajaxを使用すると、Webアプリケーションは、既存のページの表示や動作を妨げることなく、バックグラウンドで非同期にサーバーからデータを取得できます。」
SOで[編集して保存]をクリックすると、非同期で発生します。
非同期イベントは、アプリケーションのメインスレッドの外部で実行されるイベントです。
理解する最良の方法は、同期して実行されるイベントと比較することです。最も典型的な例は、Webページのロードです。
このページに移動すると、リンクをクリックして、ページがロードされるのを待って、ロードが完了するまでこのページと対話したり、このページを使用したりできませんでした。対照的に、このページにユーザーアクションに関連付けられたAJAXイベント(つまり、非同期JavaScriptおよびXMLイベント)がある場合、このページは別のソースから一部のデータを非同期で(理論的には)実行中の他のアクションと並行してロードします。
2つの同期イベント(AおよびB)の例:最初のAが何かを行います。Aが終了すると、Bが何かを行います。
2つの非同期イベント(AおよびB)の例:AとBの両方が同時に何かを行い、どちらのイベントも他方を待機しません。
これは、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ページのボタンをクリックするユーザーに置き換えます。ボタンのクリックに対する応答は、ページレンダリングなどの他のコード実行をブロックすることなく、最終的に発生します。
コードが同期(または同期)の場合は、各コードが順番に実行され、前のコードが完了するまで次のコードは実行できません。ほとんどのコードは通常同期です。
コードが非同期(または非同期)の場合、それはコードが他のコードとは独立して独立して実行できることを意味します。一連の同期コードの途中に非同期コードがある場合、この特定の質問のコンテキストでは、同期コードのどこに配置したかに関係なく、イベントがトリガーされたときにのみ非同期コードが実行されます。同期コードとは完全に分離して独立しており、前のコードの実行が完了したときだけでなく、イベントが要求するたびに実行されます。このいくつかの例は、ファイルが正常に保存された後、Webリクエストが送信された後、ユーザーがボタンをクリックしたとき、または画像が読み込まれた後に、一定の間隔で実行されるコードの場合です。