js の同期と非同期を理解する

Apr 09, 2018 am 11:19 AM
javascript 同期する 非同期

この記事で共有する内容は、js の同期と非同期の理解に関するものです。必要な友人は参考にしてください。

JavaScript 言語は「シングルスレッド」であることを知っておく必要があります。 " " 言語は、Java 言語とは異なり、Thread を継承して thread.start を使用することでスレッドを開くことができます。したがって、JavaScript はアセンブリ ラインのようなものであり、単なる アセンブリ ラインであり、処理またはパッケージ化することができます。複数のタスクとプロセスを同時に実行することはできません。 それでは、ここで言及されている

同期

非同期とは一体何でしょうか?本当に理解できない場合は、この記事をよく読んでいただければ幸いです。実際、私個人としては、この 2 つの単語を使用する公式の js ドキュメントは正確ではないと感じています (他の多くの単語も含め、洗練されたように聞こえるだけですが、実際のアプリケーションはこれらの単語とは何の関係もないようです)。たとえば、「Event Delegation」という単語を知らなければ、誰が一目で「Event Delegation」の意味を理解できるでしょうか?どのイベントが委任されますか?どのような委任なのか、少し長くなりますが、すぐに理解できると思います。 本題に戻ります。「同期」 - 「一緒に」という言葉がすぐに思い浮かびます。「非同期」は、文字通りに言うと、異なる(異なる)方法で何かをしているように見えます。それが最初に思い浮かぶ言葉かもしれません。たとえば、「シャオミンはアイスクリームを食べながら宿題をしています。アイスクリームを食べた後、彼は宿題も終えました。」ということには何の問題もありません。これは非同期ですか?それは大きな間違いです!

実際、同期と非同期は、何にせよ、物事を行うときはパイプライン(シングルスレッド)が1つしかありません

同期と非同期の違いは、このパイプライン上の各プロセスの実行順序が異なることです

最も基本的な非同期関数は setTimeout 関数と setInterval 関数で、非常に一般的ですが、これらの関数は js の実行順序を制御できるため、実際には非同期であることを知っている人はほとんどいません。また、プログラムの通常の実行シーケンスを変更する可能性のある操作は非同期操作と見なすことができることも簡単に理解できます。次のコード:

<script type="text/javascript">
        console.log( "1" );
        setTimeout(function() {
            console.log( "2" )
        }, 0 );
        setTimeout(function() {
            console.log( "3" )
        }, 0 );
        setTimeout(function() {
            console.log( "4" )
        }, 0 );
        console.log( "5" );
</script>
ログイン後にコピー

出力順序は何ですか?

setTimeout(function, time) の待ち時間を 0 に設定していますが、その中の関数は依然として後で実行されていることがわかります。

Firefox ブラウザーの API ドキュメントには次の文があります:

なぜなら

だったのに 遅延ゼロで呼び出された場合、キューに置かれ、すぐには実行されず、次の機会に実行されるようにスケジュールされます。現在実行中のコードは、キュー上の関数が実行される前に完了する必要があり、結果の実行順序は期待どおりにならない可能性があります。これは、setTimeout の遅延時間が 0 であっても、その中の関数もキューに入れられ、次の実行機会を待ちます。現在のコード (追加する必要のないプログラムを指します)。キュー) が存在する必要があります。プログラムが完了する前にキューが完了するため、結果は期待どおりにならない可能性があります。 setTimeoutここでは「キュー」(つまり、タスクキュー) について説明します。このキューには何が置かれますか? これらの関数が順番にキューに追加されます。これは、キューの外にあるすべてのコードが実行された後に実行されます。これはなぜですか?なぜなら、プログラムを実行するとき、ブラウザは時間のかかるプログラムとして setTimeout や ajax リクエストなどのメソッドをデフォルトで使用し (時間がかからない場合もあります)、それらを時間のかかるプログラムを格納するキューであるキューに追加します。プログラム。時間のかからないプログラムがすべて実行された後、キュー内のプログラムが順番に実行されます。 元の出発点に戻りましょう - JavaScript はシングルスレッドです。シングルスレッドとは、すべてのタスクをキューに入れる必要があり、前のタスクが完了するまで次のタスクは実行されないことを意味します。前のタスクに時間がかかると、次のタスクも待たされることになります。そこで、タスクキューという概念があります。キューの原因が大量の計算であり、CPU がビジー状態である場合は、そのことを忘れてください。しかし、多くの場合、IO デバイス (入力および出力デバイス) が非常に遅いため、CPU はアイドル状態になります (たとえば、Ajax 操作は、ネットワーク)、続行する前に結果が出るまで待つ必要があります。そこで、JavaScript 言語の設計者は、現時点では、メインスレッドが IO デバイスを完全に無視し、待機中のタスクを一時停止し、後のタスクを最初に実行できることに気づきました。 IO デバイスが結果を返すまで待ってから、戻って中断されたタスクの実行を続行します。

つまり、すべてのタスクは同期タスク(synchronous)と非同期タスク(asynchronous)の2種類に分けることができます。同期タスクは、メイン スレッドで実行するためにキューに入れられたタスクを指します。次のタスクは、前のタスクが実行された後にのみ実行できます。非同期タスクは、メイン スレッドには入らないが「タスク キュー タスク」に入るタスクを指します。メインスレッドのタスクが完了し、「タスクキュー」がメインスレッドに通知してタスクの実行を要求し始めた場合にのみ、タスクは実行のためにメインスレッドに入ります。

具体的には、非同期実行メカニズムは次のとおりです:

(1) すべての同期タスクはメインスレッドで実行され、実行コンテキストスタックを形成します。
(2) メインスレッドの他に「タスクキュー」もあります。非同期タスクに実行結果がある限り、イベントは「タスク キュー」に配置されます。
(3) 「実行スタック」内のすべての同期タスクが実行されると、システムは「タスクキュー」を読み取り、そこにどのようなイベントがあるかを確認します。これらの対応する非同期タスクは待機状態を終了し、実行スタックに入り、実行を開始します。
(4) メインスレッドは上記の 3 番目のステップを繰り返し続けます。

メインスレッドが空である限り、「タスクキュー」を読み取ります。これがJavaScriptの実行メカニズムです。このプロセスは繰り返され続けます。

「タスクキュー」はイベントキュー(メッセージキューとしても理解できます)であり、IOデバイスがタスクを完了すると、イベントが「タスクキュー」に追加され、関連する非同期タスクが「」に入ることができることを示します。実行スタック" "はい。メインスレッドは「タスクキュー」を読み取ります。これは、その中のイベントを読み取ることを意味します。
「タスクキュー」内のイベントには、IO デバイスイベントに加えて、$(selectot).click(function) などのユーザー生成イベント (マウスクリック、ページスクロールなど) も含まれます。比較的高価な時間操作。これらのイベントのコールバック関数が指定されている限り、これらのイベントが発生すると、イベントは「タスクキュー」に入り、メインスレッドが読み取るのを待ちます。 いわゆる「コールバック関数」(callback) は、メインスレッドによってハングアップされるコードです。前述のクリック イベント $(selectot).click(function) の関数はコールバック関数です。非同期タスクでは、コールバック関数を指定する必要があります。メインスレッドが非同期タスクの実行を開始すると、対応するコールバック関数が実行されます。たとえば、ajax の成功、完了、エラーも独自のコールバック関数を指定し、これらの関数は「タスク キュー」に追加され、実行を待ちます。

関連する推奨事項:


jsの同期と非同期

JavaScriptの同期、非同期、コールバックの実行シーケンス分析

JavaScriptプログラミングにおける同期および非同期メカニズムの深い理解

以上がjs の同期と非同期を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

win11でヘッドフォンとスピーカーを同時に再生する問題を解決する win11でヘッドフォンとスピーカーを同時に再生する問題を解決する Jan 06, 2024 am 08:50 AM

一般的に、同時に使用する必要があるのはヘッドフォンまたはスピーカーのいずれか 1 つだけですが、Win11 システムでヘッドフォンとスピーカーが同時に鳴るという問題が発生したと友人が報告しています。 Realtek パネルでオフにすれば問題ありません。以下を見てみましょう。 win11 でヘッドフォンとスピーカーが一緒に聞こえる場合はどうすればよいですか? 1. まず、デスクトップで「コントロール パネル」を見つけて開きます。 2. コントロール パネルに入り、「ハードウェアとサウンド」を見つけて開きます。 3. 次に、「」を見つけます。 Realtek High Definition" とスピーカーのアイコン。オーディオマネージャー" 4. [スピーカー] を選択し、[リアパネル] をクリックしてスピーカー設定に入ります。 5. 開くとデバイスの種類が表示されるので、ヘッドフォンをオフにしたい場合は、「ヘッドフォン」のチェックを外します。

同期したフォルダー内の 1 つ以上のアイテムが Outlook エラーと一致しません 同期したフォルダー内の 1 つ以上のアイテムが Outlook エラーと一致しません Mar 18, 2024 am 09:46 AM

同期フォルダー内の 1 つ以上のアイテムが Outlook のエラー メッセージと一致しない場合は、会議アイテムを更新またはキャンセルしたことが原因である可能性があります。この場合、ローカル バージョンのデータがリモート コピーと競合していることを示すエラー メッセージが表示されます。この状況は通常、Outlook デスクトップ アプリケーションで発生します。同期したフォルダー内の 1 つ以上のアイテムが一致しません。競合を解決するには、プロジェクトを開いて操作を再試行します。同期フォルダー内の 1 つ以上のアイテムが Outlook エラーと一致しない問題を修正する Outlook デスクトップ バージョンでは、ローカルの予定表アイテムがサーバー コピーと競合すると問題が発生する可能性があります。ただし幸いなことに、それを助ける簡単な方法がいくつかあります

win10 クリップボードと携帯電話を同期する方法を説明します win10 クリップボードと携帯電話を同期する方法を説明します Jan 06, 2024 am 09:18 AM

win10 クリップボードの非常に便利な機能は、クロスデバイス クラウド ストレージ機能です。これは非常に便利で、ユーザーが PC デバイスとモバイル デバイスで同時にコピー アンド ペーストするのに役立ちます。設定方法は非常に簡単で、システム内のクリップボードに設定するだけです。 win10 クリップボードを携帯電話に同期する 1. まず、左下隅の [スタート] をクリックして設定を入力します。 2. 次に「システム」をクリックします。 3. 左側の「クリップボード」を選択します。 4. 最後に、右側の「デバイス間同期」で「ログイン」をクリックし、携帯電話を選択します。

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

Python asyncio の上級ガイド: 初心者から専門家まで Python asyncio の上級ガイド: 初心者から専門家まで Mar 04, 2024 am 09:43 AM

同時プログラミングと非同期プログラミング 同時プログラミングは、同時に実行される複数のタスクを扱います。非同期プログラミングは、タスクがスレッドをブロックしない同時プログラミングの一種です。 asyncio は Python の非同期プログラミング用のライブラリで、プログラムがメイン スレッドをブロックせずに I/O 操作を実行できるようにします。イベント ループ asyncio の中核は、I/O イベントを監視し、対応するタスクをスケジュールするイベント ループです。コルーチンの準備が完了すると、イベント ループは I/O 操作を待つまでそのコルーチンを実行します。その後、コルーチンを一時停止し、他のコルーチンの実行を継続します。コルーチン コルーチンは、実行を一時停止および再開できる関数です。 asyncdef キーワードは、コルーチンの作成に使用されます。コルーチンは await キーワードを使用して、I/O 操作が完了するのを待ちます。 asyncio の次の基本

JavaScript で HTTP ステータス コードを簡単に取得する方法 JavaScript で HTTP ステータス コードを簡単に取得する方法 Jan 05, 2024 pm 01:37 PM

JavaScript で HTTP ステータス コードを取得する方法の紹介: フロントエンド開発では、バックエンド インターフェイスとの対話を処理する必要があることが多く、HTTP ステータス コードはその非常に重要な部分です。 HTTP ステータス コードを理解して取得すると、インターフェイスから返されたデータをより適切に処理できるようになります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法と、具体的なコード例を紹介します。 1. HTTP ステータス コードとは何ですか? HTTP ステータス コードとは、ブラウザがサーバーへのリクエストを開始したときに、サービスが

PHP 非同期コルーチン開発: データ キャッシュと読み取りおよび書き込み操作を高速化します。 PHP 非同期コルーチン開発: データ キャッシュと読み取りおよび書き込み操作を高速化します。 Dec 18, 2023 pm 01:09 PM

PHP 非同期コルーチン開発: データ キャッシュと読み取り/書き込み操作の高速化 実際のアプリケーション開発では、データ キャッシュと読み取り/書き込み操作が一般的なパフォーマンスのボトルネックになります。システム効率とユーザー エクスペリエンスを向上させるために、PHP 非同期コルーチン テクノロジを使用してこれらの操作を高速化できます。この記事では、PHP 非同期コルーチンの基本概念と原則を紹介し、具体的なコード例を示します。 1. 非同期コルーチンの概念と原理 非同期コルーチンは、単一のスレッドを使用して軽量なタスクのスケジューリングとコラボレーションを実現する効率的な同時プログラミング テクノロジです。従来のマルチスレッドまたはマルチプロセス同時プログラミングとの比較

Baidu クラウド同期ディスクを同期する方法 Baidu クラウド同期ディスクを同期する方法 Feb 23, 2024 pm 01:22 PM

Baidu Cloud Sync Disk を同期するにはどうすればよいですか? Baidu Cloud Sync Disk で同期するファイルを選択できますが、ほとんどのユーザーは Baidu Cloud ファイルを同期する方法を知りません。次に、エディターが提供する Baidu Cloud Sync Disk 同期方法のグラフィック チュートリアルです。興味のあるユーザーはぜひ見に来てください! Baidu クラウド同期ディスクを同期する方法 1. まずコンピュータのデスクトップに入り、[Baidu クラウド同期ディスク] アイコンを右クリックし、[設定] を選択します; 2. 次にサービス ウィンドウを展開し、[詳細設定] ページに切り替えて、 [フォルダの選択]; 3. 最後に以下のようなページに切り替わり、同期が必要なファイルにチェックを入れて[OK]をクリックします。

See all articles