[Node.js]概念の理解

5352 ワード

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秒でもすぐには実行しない)
  • .
  • 水田ブロック方式は実行順序を変更するだけである.
  • の実行順序を変更し、単純なタスクが
  • を待つことを防止する.
    非ブロック!=同時
  • 同期:同時タスクの非ブロック処理が必要