nodeイベントの循環とメッセージのキューを分析します。
異歩とは何か?
非同期はよく話題になるはずです。同期の概念は簡単で、上から下に順番に実行します。上で下を実行してから実行しなければなりません。非同期は先にコマンドを提出してもいいです。途中で他の事務を実行してもいいです。実行が終わったら、前のタスクに戻ります。
例を挙げます
あなたはとても幸運です。綺麗な彼女を探しました。ある日あなたの彼女からメールがありました。夜はどんな映画を見ますか?でも、何を見ているか分かりません。すぐにパソコンを開けて、最近ヒットした映画を調べてみました。その中で彼女はずっとあなたを待っています。これは同期です。
異歩は?彼女からどんな映画を見ますかとメールで聞きましたが、後で調べてから電話して彼女に伝えました。これは非同期です。
したがって、同期と非同期のいくつかの特徴が見られます。
1.必ず二つのオブジェクトに発生します。(あなたと彼女)
2.何かが起こる必要があります。(映画を見ます
違うのは、同期は順次実行し、1つを実行した後にもう1つを実行し、実行が完了するまでは、非同期は先に1つ実行し、実行が完了していないかもしれません。他の1つを実行して、最初の実行が完了したら結果を返します。
なぜ非同期が必要ですか?
答えははっきりしています。仕事の効率を上げるために、CPUの計算速度とディスクの読み書き速度があまりにも遠くて、ディスクの供給が足りないので、コンピュータの記憶システムの階層的な設計があり、効率とコストがバランスされています。怠惰が人类の进歩を促进し、いかなる时间をかけても同じ効果を达成する方法が优先的に采用されると言えます。
メールを送る時に相手の返事を待つ時間が全く無駄になりました。CPUがディスクに書き込んで戻ってくる結果を待つ時間も無情に消費されました。これは効率を重視する時代です。CPUとディスクを休ませないフル負荷で事務を処理するのも効率的です。このため、非同期処理が発生しました。
異歩IOとは?
非同期IOとは、操作システムが提供するIO(データの出入り)の能力であり、キーボード入力など、ディスプレイに対応して専用のデータ出力インターフェースがあります。このインターフェースは下の方にオペレーティングシステムというレベルに入ります。オペレーティングシステムでは、ディスクの読み書き、DNSの照会、データベースの接続、ネットワーク要求の処理など、多くの能力を提供します。
異なるオペレーティングシステムのレベルでは、表現の不一致がある。あるものは非同期でブロックされていません。同期のブロックもあります。いずれにしても、上位のシステムが下のシステムに適用されるデータのインタラクションと見なします。上層部は下層部に依存していますが、逆に上層部は下層部に提供されたこれらの能力を改造することもできます。この操作が非同期で、非ブロックである場合、非同期のIOモデルである。同期のブロックなら、同期IOモデルです。
koaは上の階層のwebサービスの枠組みであり、すべてjsによって実現され、彼はオペレーティングシステム間の相互作用があり、全部nodejsによって実現されます。例えば、nodejsのreadFileは非同期非ブロッキングインターフェースであり、readFileSyncは同期ブロッキングインターフェースである。
何が事件の循環ですか?
イベントサイクルとは、Node.jsがブロックされていないI/Oを実行することを意味し、JavaScriptはシングルスレッドであるが、ほとんどのカーネルはマルチスレッドであるため、node.jsはできるだけオペレーティングをシステムカーネルにロードする。したがって、バックグラウンドで実行される複数の動作を処理することができる。動作の一つが完了すると、カーネルはNode.jsに対し、node.jsが対応するコールバックをポーリングキューに追加して、最終的に実行できるように伝えます。つまり、jsはシングルスレッドですが、nodeが実行する時はマルチスレッドです。個人的には理解していますが、メッセージ・キューは先発的な列で、そこには様々な情報が保存されています。
V 8エンジン
私たちがよく言っているChromeエンジンとnodejsエンジンはV 8エンジンです。彼は大体以下のように構成されています。
このエンジンはメモリスタックとコールスタックから構成されています。メモリスタックは変数の割り当てなどのメモリの役割を果たしています。コールスタックはコードの実行場所です。
スタック内で順次メインスレッドのコードを実行し、スタック中が空である場合、jsエンジンはメッセージキューにメッセージを取りに行く。取ったら実行します。JavaScriptは単一スレッドのプログラミング言語で、単一の呼び出しスタックがあることを意味します。ですから、同じ時間にしかできません。コールスタックはデータ構造で、基本的にはプログラム中の位置を記録しています。関数に入ると、これらのデータをスタックの上に置きます。関数から戻ると、これらのデータがスタックのトップからイジェクトされます。これがスタックの用途です。コールスタックの各エントリは、スタックフレームと呼ばれる。積み上げと倉庫の違いは先に出して、先に出してください。
jsを実行する時
私たちがよく使うAPIのいくつかは、jsエンジンで提供されるものではなく、例えばタイマーsetTimeoutである。
実はブラウザで提供されています。つまり運行時に提供されていますので、実際にはJavaScriptエンジン以外にも他のコンポーネントがあります。
この中にはブラウザで提供されるWeb APIというコンポーネントがあります。DOM、AJAX、setTimeoutなどです。
そして、大人気のイベントループとリプライ行列。
運転時にエンジンスレッドにメッセージを送るのは担当していますが、メッセージの作成だけは担当していません。
メッセージキュー
主スレッドは、実行中に非同期のタスクに遭遇した場合、開始関数または登録関数として、event loopスレッドを介して対応するワークスレッド(ajax、dom、setTimoutなど)を通知します。一方、メインスレッドは後に続くので、待ち時間はありません。作業スレッドがタスクを完了すると、eventloopスレッドはメッセージをメッセージキューに追加します。このとき、メインスレッド上でスタックが空であれば、メッセージキューの先頭にあるメッセージを実行して、順次実行します。
新しいメッセージが列に入ると、自動的に列の端に並びます。
単一スレッドはjsタスクが並ぶ必要があり、前のジョブが大量に発生すると、後のタスクが実行されなくなり、ジョブの蓄積がページの「仮死」を引き起こすことを意味します。これもjsプログラミングで、回避が必要な「坑」を強調しています。
このようなステップは、メインスレッドがメッセージキューからメッセージを取り出し、実行するプロセスを繰り返すイベントループである。
注意したいのはGUIレンダリングスレッドとJSエンジンは互いに反発しており、JSエンジンが実行されるとGUIスレッドが吊り上げられ、GUI更新は一つのキューに保存されてJSエンジンが空き次第実行される。したがって、ページレンダリングは、jsエンジンのメインスレッドの呼び出しスタックが空の場合に行われます。
イベントサイクル機構とメッセージキューのメンテナンスは、イベントトリガスレッドによって制御される。
イベントトリガスレッドは、ブラウザレンダリングエンジンによって提供され、メッセージキューを維持します。
JSエンジンスレッドが非同期(DOMイベントの傍受、ネットワーク要求、setTimeoutタイマなど)に遭遇すると、対応するスレッドに個別に非同期タスクを維持し、あるタイミング(タイマ終了、ネットワーク要求成功、ユーザがDOMをクリック)を待って、イベントトリガスレッドによって非同期対応のコールバック関数をメッセージキューに追加します。メッセージキューのコールバック関数が実行されるのを待っています。
同時に、JSエンジンスレッドは実行スタックを維持し、同期コードは順次実行スタックに加入して実行し、終了すると実行スタックを終了します。
スタック内のタスクの実行が完了すると、すなわち、スタックが空である場合(即ち、JSエンジンスレッドがアイドル状態である)、イベントトリガスレッドは、メッセージキューからタスク(すなわち、非同期のコールバック関数)を取り出して、実行スタックに入れて実行することができる。
以上はnode事件の循環とメッセージのキューの詳しい内容を分析して、もっと多いnode事件の循環とメッセージのキューの資料に関して私達のその他の関連している文章に関心を持って下さい!
非同期はよく話題になるはずです。同期の概念は簡単で、上から下に順番に実行します。上で下を実行してから実行しなければなりません。非同期は先にコマンドを提出してもいいです。途中で他の事務を実行してもいいです。実行が終わったら、前のタスクに戻ります。
例を挙げます
あなたはとても幸運です。綺麗な彼女を探しました。ある日あなたの彼女からメールがありました。夜はどんな映画を見ますか?でも、何を見ているか分かりません。すぐにパソコンを開けて、最近ヒットした映画を調べてみました。その中で彼女はずっとあなたを待っています。これは同期です。
異歩は?彼女からどんな映画を見ますかとメールで聞きましたが、後で調べてから電話して彼女に伝えました。これは非同期です。
したがって、同期と非同期のいくつかの特徴が見られます。
1.必ず二つのオブジェクトに発生します。(あなたと彼女)
2.何かが起こる必要があります。(映画を見ます
違うのは、同期は順次実行し、1つを実行した後にもう1つを実行し、実行が完了するまでは、非同期は先に1つ実行し、実行が完了していないかもしれません。他の1つを実行して、最初の実行が完了したら結果を返します。
なぜ非同期が必要ですか?
答えははっきりしています。仕事の効率を上げるために、CPUの計算速度とディスクの読み書き速度があまりにも遠くて、ディスクの供給が足りないので、コンピュータの記憶システムの階層的な設計があり、効率とコストがバランスされています。怠惰が人类の进歩を促进し、いかなる时间をかけても同じ効果を达成する方法が优先的に采用されると言えます。
メールを送る時に相手の返事を待つ時間が全く無駄になりました。CPUがディスクに書き込んで戻ってくる結果を待つ時間も無情に消費されました。これは効率を重視する時代です。CPUとディスクを休ませないフル負荷で事務を処理するのも効率的です。このため、非同期処理が発生しました。
異歩IOとは?
非同期IOとは、操作システムが提供するIO(データの出入り)の能力であり、キーボード入力など、ディスプレイに対応して専用のデータ出力インターフェースがあります。このインターフェースは下の方にオペレーティングシステムというレベルに入ります。オペレーティングシステムでは、ディスクの読み書き、DNSの照会、データベースの接続、ネットワーク要求の処理など、多くの能力を提供します。
異なるオペレーティングシステムのレベルでは、表現の不一致がある。あるものは非同期でブロックされていません。同期のブロックもあります。いずれにしても、上位のシステムが下のシステムに適用されるデータのインタラクションと見なします。上層部は下層部に依存していますが、逆に上層部は下層部に提供されたこれらの能力を改造することもできます。この操作が非同期で、非ブロックである場合、非同期のIOモデルである。同期のブロックなら、同期IOモデルです。
koaは上の階層のwebサービスの枠組みであり、すべてjsによって実現され、彼はオペレーティングシステム間の相互作用があり、全部nodejsによって実現されます。例えば、nodejsのreadFileは非同期非ブロッキングインターフェースであり、readFileSyncは同期ブロッキングインターフェースである。
何が事件の循環ですか?
イベントサイクルとは、Node.jsがブロックされていないI/Oを実行することを意味し、JavaScriptはシングルスレッドであるが、ほとんどのカーネルはマルチスレッドであるため、node.jsはできるだけオペレーティングをシステムカーネルにロードする。したがって、バックグラウンドで実行される複数の動作を処理することができる。動作の一つが完了すると、カーネルはNode.jsに対し、node.jsが対応するコールバックをポーリングキューに追加して、最終的に実行できるように伝えます。つまり、jsはシングルスレッドですが、nodeが実行する時はマルチスレッドです。個人的には理解していますが、メッセージ・キューは先発的な列で、そこには様々な情報が保存されています。
V 8エンジン
私たちがよく言っているChromeエンジンとnodejsエンジンはV 8エンジンです。彼は大体以下のように構成されています。
このエンジンはメモリスタックとコールスタックから構成されています。メモリスタックは変数の割り当てなどのメモリの役割を果たしています。コールスタックはコードの実行場所です。
スタック内で順次メインスレッドのコードを実行し、スタック中が空である場合、jsエンジンはメッセージキューにメッセージを取りに行く。取ったら実行します。JavaScriptは単一スレッドのプログラミング言語で、単一の呼び出しスタックがあることを意味します。ですから、同じ時間にしかできません。コールスタックはデータ構造で、基本的にはプログラム中の位置を記録しています。関数に入ると、これらのデータをスタックの上に置きます。関数から戻ると、これらのデータがスタックのトップからイジェクトされます。これがスタックの用途です。コールスタックの各エントリは、スタックフレームと呼ばれる。積み上げと倉庫の違いは先に出して、先に出してください。
jsを実行する時
私たちがよく使うAPIのいくつかは、jsエンジンで提供されるものではなく、例えばタイマーsetTimeoutである。
実はブラウザで提供されています。つまり運行時に提供されていますので、実際にはJavaScriptエンジン以外にも他のコンポーネントがあります。
この中にはブラウザで提供されるWeb APIというコンポーネントがあります。DOM、AJAX、setTimeoutなどです。
そして、大人気のイベントループとリプライ行列。
運転時にエンジンスレッドにメッセージを送るのは担当していますが、メッセージの作成だけは担当していません。
メッセージキュー
主スレッドは、実行中に非同期のタスクに遭遇した場合、開始関数または登録関数として、event loopスレッドを介して対応するワークスレッド(ajax、dom、setTimoutなど)を通知します。一方、メインスレッドは後に続くので、待ち時間はありません。作業スレッドがタスクを完了すると、eventloopスレッドはメッセージをメッセージキューに追加します。このとき、メインスレッド上でスタックが空であれば、メッセージキューの先頭にあるメッセージを実行して、順次実行します。
新しいメッセージが列に入ると、自動的に列の端に並びます。
単一スレッドはjsタスクが並ぶ必要があり、前のジョブが大量に発生すると、後のタスクが実行されなくなり、ジョブの蓄積がページの「仮死」を引き起こすことを意味します。これもjsプログラミングで、回避が必要な「坑」を強調しています。
このようなステップは、メインスレッドがメッセージキューからメッセージを取り出し、実行するプロセスを繰り返すイベントループである。
注意したいのはGUIレンダリングスレッドとJSエンジンは互いに反発しており、JSエンジンが実行されるとGUIスレッドが吊り上げられ、GUI更新は一つのキューに保存されてJSエンジンが空き次第実行される。したがって、ページレンダリングは、jsエンジンのメインスレッドの呼び出しスタックが空の場合に行われます。
イベントサイクル機構とメッセージキューのメンテナンスは、イベントトリガスレッドによって制御される。
イベントトリガスレッドは、ブラウザレンダリングエンジンによって提供され、メッセージキューを維持します。
JSエンジンスレッドが非同期(DOMイベントの傍受、ネットワーク要求、setTimeoutタイマなど)に遭遇すると、対応するスレッドに個別に非同期タスクを維持し、あるタイミング(タイマ終了、ネットワーク要求成功、ユーザがDOMをクリック)を待って、イベントトリガスレッドによって非同期対応のコールバック関数をメッセージキューに追加します。メッセージキューのコールバック関数が実行されるのを待っています。
同時に、JSエンジンスレッドは実行スタックを維持し、同期コードは順次実行スタックに加入して実行し、終了すると実行スタックを終了します。
スタック内のタスクの実行が完了すると、すなわち、スタックが空である場合(即ち、JSエンジンスレッドがアイドル状態である)、イベントトリガスレッドは、メッセージキューからタスク(すなわち、非同期のコールバック関数)を取り出して、実行スタックに入れて実行することができる。
以上はnode事件の循環とメッセージのキューの詳しい内容を分析して、もっと多いnode事件の循環とメッセージのキューの資料に関して私達のその他の関連している文章に関心を持って下さい!