JavaScript並行処理モデル
3223 ワード
JavaScriptのConcurrenyモデル
この記事ではJavaScriptがどのように並行性を実装しているのか、そしてイベントループとは何かを見つけるつもりです.
だからまず最初に、JavaCrPitについて私たちが知っていることは、
シングルスレッドは2つの文を同時に実行できないことを意味します
一部のコードの実行を意味する非ブロッキングは、プログラムの実行を停止してはいけません.
非同期は、2つ以上のタスクを同時に行うことができることを意味します、
同時実行は、複数の計算を同時に行うことができます.
コード例
console.log("Hello");
setTimeout( () => {
console.log("Hello inside setTimeout");
}, 1000);
console.log("Bye");
上記の文を実行した後、ブラウザは「hello」と「bye」を最初に印刷し、次に「こんにちはSetTimeoutの内部」を印刷します.我々はイベントループを最初に学ぶ必要がある答えを見つけるために.
イベントループ可視化
fig :イメージsrc : freecodecamp.org
ヒープ:すべての変数のメモリ割り当てが行われる場所です.
スタック:これはすべてのJavaScriptコードがプッシュされ、行ごとに実行され、実行後にポップアウトされる場所です.JavaScriptは、このスタックのみを使用して実行コンテキストの順序を維持します.また、プログラムスタックまたは実行コンテキストスタックとして知られています.
コールバックキュー:これはすべての非同期コードが行く場所です.settimeout、setInterval、HTMLイベント、およびAjaxリクエストからのコールバック関数は、実行時にこのキューにプッシュされます.
イベントループ:イベントループの主な機能は、プログラムスタックをチェックし、空であるかどうかを確認することです.スタックが空の場合、コールバックキューをチェックします.コールバックキューが空でない場合、コールバックキューから主スタックへのコードブロックをプッシュし、順次実行します.
今は、上記のプログラムが実行されているときに起こっていることを理解しようとすることができます.
運動時間
const promise = new Promise((resolve, reject) => {
console.log(1);
setTimeout(() => {
console.log("timerStart");
resolve("success");
console.log("timerEnd");
}, 0);
console.log(2);
});
promise.then((res) => {
console.log(res);
});
console.log(4);
上記のコードスニペットの出力は-1
2
4
タイムスタート
ティームレット
成功
出力の簡単な説明
すべてのコンソールの最初の
イベントキューに関する重要な事実
いつイベントループを利用しますか?
あなたが連続的に必要でない重い計算をする必要があるとき、
Reference
この問題について(JavaScript並行処理モデル), 我々は、より多くの情報をここで見つけました https://dev.to/sarthaksam/javascript-concurrency-model-4hodテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol