TIL 029 | Node.js


Node.いわゆる


Node.jsを定義すると、非同期イベントがJavaScriptランタイム環境を駆動します.Node.jsは、Webブラウザに依存するJavaScriptを外部で実行できるCherome V 8エンジンを提供し、複数のオペレーティングシステム上で実行できる環境を提供します.

非同期イベント-ベース


ノードの場合、イベントはフロントエンド(クライアント)から受信された要求である.
ノード非同期処理イベントは、前のクライアントのリクエストが完了する前に、ノードが次のクライアントのリクエストを受信することを意味する.
既存の同期要求は、コードを1行1行実行します.したがって、1つのタスクにどれだけ時間がかかるかにかかわらず、最初のコードが実行された後、次のコードが実行されます.これにより、前の作業時間が長ければ長いほど、時間と資源の浪費が深刻になります.これは、1つのリクエストが完了するのを待つのではなく、別のタスクを同時に実行するために、異歩で克服することができます.
したがって、JavaScriptが単一スレッドとして実行されることに関連して、1つの時点で複数のリクエストを実行できます.

JavaScriptを実行すると、次の要素が役立ちます.
  • Call Stack:JavaScriptで実行する必要がある関数をスタックに順次入れて処理する
  • .
  • Web API:AJAXやTimeoutなどのWebブラウザから提供されるAPIを使用して非同期操作を実行
  • Task Queue:Callback Queueとも呼ばれ、Web APIによって伝達されるCallback関数
  • が格納される
  • イベントログ:コールキューが空の場合、タスクキュー内のタスクをコールキュー
  • に移行する.
    setTimeout(() => console.log('hello world!'));
    console.log('hello javascript!');
    
    // hello javascript!
    // hello world!
    hello world! 出力されたコードが上にあっても、後で出力されるコードが見えます.
    プロセスを理解し、
  • は、まずsettimeout関数を実行し、Call Stackにsettimeout関数を追加する.
  • settimeout関数は、JavaScriptエンジンではなくWeb APIによって処理される.(NodeJSの場合、Timersモジュール)settimeout関数は、Web APIのTimeout操作を要求した時間後、パラメータとして受信したコールバック関数をTask Queueを用いて渡す.
  • は、その後、2行目に作成されたコンソールである.Call Stackにログが追加されます.そしてCallStackのコンソールログが実行され、コンソールに「hello javascript!」が表示されます.名前の文字列が出力されます.
  • このとき、JavaScriptのイベントループは常にCall Stackが空であるかどうかをチェックし、さっきのコンソールです.ログが実行され、Call Stackが空であることを確認します.
  • Call Stackが空であることを確認すると、Event LoopはTask Queueのコールバック関数をCall Stackに移動してタスクを実行します.コンソールに「hello world!」追加出力が表示されます.
  • すべてのタスクが完了すると、コールステーションとタスクキューが空になります.
  • JavaScriptランタイム環境


    ノードの単一スレッドはHeavy Loadの作業をC++で記述されたスレッドプールに渡す.単一スレッドはイベントを処理する役割を果たすだけです.前のクライアントからのリクエストが完了するのを待たずに次のリクエストを処理できるのは、Heavy Loadの作業がバックエンドの内部C++スレッドプールが担当するためです.したがって、ノードの単一スレッドは、複数のリクエストを同時に処理することができる.
    JavaScriptランタイム環境の定義は次のとおりです.
    JavaScriptで作成したソースコードを、CPUが理解できるマシン言語(ex.0と1からなるバイトコード)に変換し、プログラムメモリを管理するシステム.
    このような環境を可能にしたのがChrome V 8エンジンです.Chrome V 8エンジンは、GoogleのChrome Webブラウザで実行されているエンジンであり、ブラウザを必要とせずに実行できる環境がノードであることを知っています.
    上記の非同期イベント-ベースの処理はこのChrome V 8エンジンが担当します.すなわち,単一スレッドに基づく動作原理を理解し,JavaScriptでコードを記述すると,Chrome V 8エンジンはHeavy Loadの行うことを処理する.したがって、JavaScriptコードは、迅速で信頼性の高いアプリケーションの設計に使用されます.

    references


    https://chanyeong.com/blog/post/44
    https://medium.com/day34/node-js-%EB%85%B8%EB%93%9C%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%96%B4%EB%96%A0%ED%95%9C-%EA%B8%B0%EB%8A%A5%EB%93%A4%EC%9D%B4-%EC%9E%88%EB%8A%94%EA%B0%80-1-98e49e1100ab
    https://zereight.tistory.com/855