Node.js
サーバー
ネットワークを介してクライアントに情報またはサービスを提供するコンピュータまたはプログラム.
アプリケーションまたはWebは、サービスのデータを生成し、これらのデータを格納および受信するために必要なデータ(アイデンティティ、パスワード、電子メールなど)を使用する. サーバは、クライアント(送信可能要求)である可能性がある.
サーバはクライアントの要求に応答します.
クライアント
要求を送信主体.
サーバは、ブラウザ/デスクトッププログラム/モバイルアプリケーション/その他のサーバに要求を送信する.
例
Webサイトへのアクセス、要求:「アドレス」ウィンドウにウェブサイトアドレスを入力する.
応答:サーバからWebページを取得し、リクエスト者のブラウザに配置する.
モバイルアプリケーションのインストール時、リクエスト:ゲームショップ、アプリケーションストアで目的のアプリケーションを選択し、インストールボタンを押します.
応答:アプリケーションダウンロードノード
Chrome V 8 JavaScriptエンジンで構築されたJavaScriptランタイムコンピュータ上でJavaScriptプログラムを実行できる
V 8 libuvライブラリ:C,C++実装(JavaScriptコードをノードで接続)を使用
V 8:オープンソースJavaScriptエンジン libuv:非ブロックI/O、イベントベースノードはJavaScriptイニシエータです.
じっこうじかん
環境は、特定の言語で記述されたプログラムを実行することができる.
既存のJavaScriptプログラム実行環境
Webブラウザでのみ実行するブラウザ:JavaScriptランタイムを埋め込みます. 2008年Google Chromeリリースイベントベース
により予め指定されたタスクを実行
イベント:クリック、ネットワークリクエストなどイベントに基づくシステムでは、特定のイベントが発生したときにどのような動作を実行するかを予め登録する
イベントリスナーにコールバック関数を登録します.
例
ボタンをクリックすると警告ウィンドウが表示される.
コールバック関数を登録し、
クリックイベントリスナーに警告ウィンドウを表示する.
イベントコールバック関数を実行
ノードの場合
イベントの発生時にイベントリスナーに登録するコールバック関数を呼び出す.
未発生または発生したイベント処理が完了した後、次のイベントの発生を待つ.
イベントループ
は、複数のイベントが同時に発生するときにコールバック関数を呼び出す順序を判断する.
function first() {
second();
console.log('first');
}
function second() {
third();
console.log('second');
}
function third() {
console.log('third');
}
first();
関数呼び出しスタック(呼び出しスタック):anonymous,first(),second(),third()順序関数の実行:スタックを3番目の()、2番目の()、1番目の()、匿名の順序で呼び出す逆のの実行中、呼び出しスタックは停止し、実行が完了すると、呼び出しスタックから消えます.匿名関数
初回実行時のグローバルコンテキスト(グローバルコンテキスト) context:関数を呼び出すときに作成される環境 javaスクリプトコードは、実行時にデフォルトでグローバルコンテキストでを返します.
function run(){
console.log('3초 후 실행');
}
console.log('시작');
setTimeout(run, 3000);
console.log('끝');
コンソール:起動、終了、および3秒後に実行
呼び出しスタックにsettimeout()(タイマ実行前)を蓄積する.
settimeout()を実行すると、コールバックrunがバックグラウンドに送信され(settimeoutは呼び出しスタックにpop)、匿名実行後pop
2.1. 呼び出しスタックが空の場合、イベントループはタスクキューから関数を取得し、呼び出しスタックに入れて実行します. は、バックグラウンド3秒後にタスクキューに送信する.
コールスタックが閉じるイベントループは、タスクキューコールバックを呼び出しスタックに昇格させる.
運転
run,pop アクティブループは、タスクキューのダイヤルバックを待つ.イベントループ
イベント発生時
呼び出すコールバック関数の管理ロールはコールバック関数を呼び出す実行順序を決定する.
ノードが終了する前に、ループと呼ばれるイベントの処理を繰り返す.
バックグラウンド
タイマ、イベントリスナーが待機する位置 JavaScript言語以外で作成されたプログラム複数のタスクを同時に実行できるタスクキュー
所定の順序で並ぶコールバックをコールバックキューと呼ぶ.
イベント発生後タスクキューイベントリスナー、タイマコールバック関数は、場合によっては順序を変更することがある.
は、複数のキューから構成される.シングルスレッド
javascriptコードは単一スレッドであるため、コードはXを同時に実行する
ノード実行時に1つのプロセスを作成し、プロセス内に複数のスレッドを作成しますが、直接制御可能なスレッド==1つだけが単一スレッドとみなされます.
深刻な渋滞が発生した作業でなければ可能です.非ブロッキングで待機時間を最大限に減らす方法もある.
プロセス
オペレーティングシステムが割り当てるタスクユニットノードやWebブラウザなどのアプリケーションリソース共有X 、例えば
プロセス間のメモリ
ねじ山
フローで実行するフローユニット複数の
スレッドを作成し、複数のタスクを同時に処理
親プロセスを共有するリソース同じアドレスのメモリにアクセスでき、データを共有できるマルチスレッドとシングルスレッド
例
単一スレッド、ブロック1名店員、複数のお客様注文を受け取ってから料理を待って、サービス後の次の注文(ブロック)効率が最も低い 単一スレッド、非ブロックノードはを採用する
複数のお客様からのご注文料理が完成したソーセージ、サービスブロックでは、水田ブロック方式によって料理が完成する順番が異なるため、注文順とサービス順が一致しない.
店員が気絶したり、長い時間がかかる料理(CPUをよく使う仕事)がたくさん入ったりしたら、面倒です.
マルチスレッド、ブロックお客様1名様につき店員が配置されています
店員が一人もいなくても他の人に手配できます客が多くなって、店員も多くなって、客が少なくなって、遊ぶ店員は多くなった店員の雇用・解雇による費用の発生・実施も困難である.マルチスレッドとマルチプロセッサ
マルチスレッド
1.1. 1つのプロセスで複数のスレッドを使用
1.2. CPU密集型
1.3. プログラミング困難マルチプロセッシング
2.1. 複数のプロセスの使用
2.2. I/O要求過多時使用
2.3. プログラミングが容易なスレッドプール
ノードは、いくつかの動作を実行するときに、マルチスレッドを自動的に使用する.
暗号化、ファイルI/O、圧縮等ワークスレッド
ノード12版後マルチスレッド CPUタスクが多数ある場合は、ワークスレッドを使用できます.非ブロックI/O
コードは同時に実行できませんが、JavaScriptではなくI/O操作を同時に処理できます.ファイルシステムアクセス(フォルダの読み取り、書き込み、作成など)、次のタスクの完了を待たず、に網を張る
より前のタスクが完了してから、次のタスクを実行できます.同時に処理できるタスクをバックグラウンドに集中して時間を節約
例
w 1,2,3,4,5の1,3,5は同時に処理することができる. ブロックモードでは、すべてのタスクを処理するのに5秒が必要である.
非ブロックモードでは、すべてのタスクを処理するのに3秒が必要である.
操作の順序によってパフォーマンスが異なります.
function longRunTask(){
...//블로킹 방식의 I/O 작업 수행(시간 오래 걸리는 작업)
console.log('작업 끝');
}
console.log('시작');
longRunTask();
console.log('다음');
開始、タスク終了、次へ
function longRunTask(){
...//블로킹 방식의 I/O 작업 수행(시간 오래 걸리는 작업)
console.log('작업 끝');
}
console.log('시작');
setTimeout(longRunTask, 0);
console.log('다음');
開始、次、タスク終了
settimeout(コールバック,0):コードを非ブロックコードにするためのコード(0秒でもすぐには実行しない).
水田ブロック方式は実行順序を変更するだけである. の実行順序を変更し、単純なタスクがを待つことを防止する.
非ブロック!=同時
同期:同時タスクの非ブロック処理が必要
Reference
この問題について([Node.js]概念の理解), 我々は、より多くの情報をここで見つけました
https://velog.io/@jjaa9292/Node.js-개념-이해
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol