- ヒープ
スタックは、所望のデータの割り当てられたメモリ空間(メモリ)を格納するための手段。 オブジェクトの値がスタックに割り当てられ、記録アドレスに格納された値の位置は、 このアドレスをオブジェクトという変数に格納されているに(メモリは、スタックメモリと言うことができます)。 したがって、この変数は唯一の代わりにオブジェクトをコピーするので、参照アドレスのコピーを複製し。
- スタック(最終)
これは、メッセージ(イベント)の順序に従って、データ収集のスタックと見なすことができます。 これは、関数のメソッド内にネストのセットとして見ることができ、 そしてこの方法は、依然として一つの方法ので、ネストされたN層内にネスト。 この方法を実行するときには、最外層の方法を実行するために、すなわち第1の方法は、その後、ネストされたレベルの逆順の内部が終了している、方法に等最も内部層を行い、内部の方法を実行するために必要。 ですから、このような方法(スタック)を実行するとき、それはそう、最後のアウトにちなんで名付けられた「近づくように、最後の」の最初の実装です。 JavaScriptは、同期コードを実行するためにメインスレッドシングルスレッドの言語です。 関数が呼び出されると、それはまた、呼び出し、内部変数への位置情報を保存するには、「コール・フレーム」として知られているメモリ内の「通話記録」を形成します。内部関数は、他の関数を呼び出す場合は、上記の通話録音は、通話記録を形成することになる
の呼び出しのすべてのレコードを形成するために、「呼び出しスタックを。」(クロージャ、末尾呼び出し、末尾再帰最適化) - キュー(FIFO)
キューは、メッセージに応じてイベントのシーケンスに配置された収集手段と見なすことができます。 相違点は、処理されるべき最初の記事の最後に移し、キューベルトとして線形な方法です。
- まとめと拡大
JavaScriptがシングルスレッドで、同時に複数のタスクを実行することはできません、それはすべてのシングルスレッドのタスクがキューイングする必要があることを意味します。 ;しかし、内部のJavaScriptで、多くの時間が非常に遅いネットワークIOなどを実行中のスレッドを停止する JavaScriptは、メインスレッド外でタスクキューを実装して、CPUがアイドル状態で、この時間、資源の浪費につながる IOのように類推遅く操作は一時的に、このタスクを実行するには、メインスレッドには影響しません、タスクキューに掛けます IOレスポンスが戻った後、戻ってメインスレッドにタスクを実行するためにハングアップするまで待ちます。 などAjaxリクエスト、タイマー、として、UIのイベントが最初ではなく、メインスレッドに掛かっよりも、ジョブキューに移動します。
各タスクキュータスクは、(タスク)複数のイベントのスタックとみなすことができるので、これは、複数の(タスク)によってタスクキューキューと見なすことができるスタックからなる
場合、キュー内(タスク)スタックが(空)、彼らは削除され、この(タスク)スタックを出してあげる終了し、その後、最終的メッセージ上記のメインスレッドのスタック内(タスク)の実装が返されます。 このプロセスは、このメッセージ機能に関連付けられているコール(ならびにこのようにして作成初期スタックフレームの系列)を含みます。 スタックが空であるときには、メッセージ処理の終了を意味します。 このプロセスは、進行中のサイクルであるので、この機構の全体の動作は、イベントループ(イベントループ)として知られています。JSは、シングルスレッドであり、メインスレッドは、同期コード、イベント、I / O動作および他の非同期タスクを実行し、キューの実行、結果が知られた後に非同期実行に入るタスクは、待ち状態、イベント、形成する
メインスレッドの同期コード実行後、次に「タスクキュー」、イベントコールバックの非同期タスクからイベントを読み取ります。 実行の順序が同期している理由はここに>は非同期>コールバック
より簡単に:限りメインスレッドとして空(同期)は、JavaScriptの動作メカニズムである「タスクキュー」(非同期)を、読み取ることができます。
JavaScriptのヒープ、スタックとキューについて
おすすめ
転載: www.cnblogs.com/jiapengsongweb/p/11543232.html
ランキング