違い: 同期では、関数呼び出しが発行されると、1 つの処理を 1 つずつ実行する必要があり、前の処理が完了するまで次の処理を実行できません。一方、非同期では、非同期プロシージャ呼び出しが行われると、が発行されると、最後に、呼び出し元は結果を取得する前に後続の操作を実行し続けることができます。
このチュートリアルの動作環境: Windows7 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。
JavaScript 言語は「シングルスレッド」言語です。
Java 言語とは異なり、クラスは Thread を継承し、thread.start を使用してスレッドを開きます。
つまり、JavaScript は組み立てラインのようなもので、処理またはパッケージ化の単なる組み立てラインであり、複数のタスクやプロセスを同時に実行することはできません。
「同期性」 - それは人々に「一緒に」という言葉をすぐに思い出させます;
「非同期性」は、文字通りに言えば、異なる (異なる) 場所にあるようです。何か、
最初に思い浮かぶ単語は「その間...ながら...」かもしれません。たとえば、「シャオミンは宿題をしながらアイスクリームを食べています。」それは何も問題ありません。アイスクリームを食べたら宿題が終わった、書き終わった、これは非同期ですか?それは大きな間違いです!
実際には、同期であっても非同期であっても、
何にせよ、物事を実行するときに存在するパイプラインは 1 つだけ (シングル スレッド) です。 ,
同期と非同期の違いは、このパイプライン上の各プロセスの実行順序が異なることです。
最も基本的な非同期は setTimeout 関数と setInterval 関数です。 は非常に一般的ですが、これが実際には非同期であることを知っている人はほとんどいません。 jsの実行順序。これを単純に次のように理解することもできます。 プログラムの通常の実行シーケンスを変更できる操作は、非同期操作とみなすことができます。次のコード:console.log( "1" ); setTimeout(function() { console.log( "2" ) }, 0 ); setTimeout(function() { console.log( "3" ) }, 0 ); setTimeout(function() { console.log( "4" ) }, 0 ); console.log( "5" );
setTimeout(function, time) の待ち時間を 0 に設定していますが、その中の関数は依然として後で実行されていることがわかります。
setTimeout の遅延時間は 0 ですが、関数もキューに入れられ、次の実行機会を待ちます。現在のコード (キューに追加する必要のないプログラム) は、そのキュー内のプログラムが完了する前に完了する必要があります。そのため、結果が期待どおりにならない可能性があります。ここでは「キュー」(つまり、タスク キュー) について説明します。
このキューには何が配置されますか? 配置されるのは setTimeout の関数です
これらの関数は順番にキューに追加されます、つまり、キュー内のすべての関数のプログラムは、キューの外にあるすべてのコードが実行された後に実行されます。これが理由です?プログラムを実行するとき、ブラウザーは時間のかかるプログラムとして setTimeout や ajax リクエストなどのメソッドをデフォルトで使用するためです (時間がかからない場合もあります)。プロセス (process). プログラムのキュー。時間のかからないプログラムがすべて実行された後、キュー内のプログラムが順番に実行されます。 元の出発点に戻ります。JavaScript はシングルスレッドです。シングルスレッドとは、すべてのタスクをキューに入れる必要があり、前のタスクが完了するまで次のタスクは実行されないことを意味します。前のタスクに時間がかかると、次のタスクも待たされることになります。
つまり、タスクキューという概念があります。キューの原因が大量の計算であり、CPU がビジー状態である場合は、そのことを忘れてください。
したがって、すべてのタスクは 2 つのタイプに分類できます。
1 つは同期タスク (synchronous)、もう 1 つは非同期タスク (asynchronous) です。同期タスクとは、メイン スレッドで実行するためにキューに入れられているタスクを指します。
次のタスクは、前のタスクが実行された後にのみ実行できます。非同期タスクとは、メイン スレッドには入らず、「タスク」に入るタスクを指します。キュー」(タスクキュー)。キュー)では、メインスレッドのタスクが完了し、「タスクキュー」がメインスレッドに通知してタスクの実行を要求し始めた場合にのみ、タスクはメインスレッドに入り実行されます。 具体的には、非同期実行メカニズムは次のとおりです。#すべての同期タスクはメイン スレッドで実行され、実行コンテキスト スタックを形成します。
メインスレッドは上記の 3 番目のステップを繰り返し続けます。
#メインスレッドが空である限り、JavaScript の実行メカニズムである「タスクキュー」を読み取ります。このプロセスは繰り返され続けます。
「タスク キュー」内のイベントには、IO デバイスのイベントに加えて、ユーザーによって生成されたいくつかの
イベント (マウス クリック、ページ スクロールなど) も含まれます。など)、たとえば、$(selectot).click(function) など、これらは比較的時間のかかる操作です。
これらのイベントのコールバック関数が指定されている限り、これらのイベントは発生時に「タスク キュー」に入り、メイン スレッドによる読み取りを待機します。
いわゆる「
コールバック関数」(コールバック)は、メインスレッドによってハングアップされるコードです。クリック イベントの関数 $(selectot).click(function ) 前述のコールバック関数です。非同期タスクではコールバック関数を指定する必要があり、メインスレッドが非同期タスクの実行を開始すると、対応するコールバック関数が実行されます。例えば、ajaxのsuccess、complete、errorにも独自のコールバック関数が指定されており、これらの関数は「タスクキュー」に追加されて実行を待ちます。 プログラミング関連の知識について詳しくは、
プログラミング ビデオ以上がJavaScriptの非同期と同期の違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。