Open hayashi-ay opened 1 year ago
ノンブロッキングI/Oを処理する方法として、データが戻されるまでループを回してポーリングする「ビジーウェイト(busy-waiting)」と呼ばれる方法があるが、データが読み込みになるまでCPUを浪費してループを回すことになるので効率が良くない。 最近のOSでは「同期イベント多重分離(synchronous event demultiplexing)」や「イベント通知インターフェイス(event notification interface)」と呼ばれる機構が用意されている。 監視対象の複数リソースで生じるI/Oイベントをひとつのキューに集めて処理するものである。
イベント多重分離の実装はOSごとに異なるため抽象化するためにlibucというCのライブラリが作成された。libuvはシステムコールの抽象化だけでなくリアクタパターンの実装にもなっており、イベントループの生成、イベントキューの管理、非同期I/Oの実行などのAPIを提供している。
リアクタパターンとlibuvはNodeの基本となる要素だが、全体としては他に以下の3つのコンポーネントもある。
Node.jsのアーキテクチャ
2.2.2.5 requireは同期関数 2.2.2.6 依存解決 2.2.2.7 モジュールのキャッシュ 2.2.2.8 モジュールの循環参照
thunk(サンク):コールバック以外のすべての引数を部分適用した関数
バックプレッシャ
DuplexストリームはReadableかつWritableなストリームである。
デコレータは既存のオブジェクトの振る舞いを動的に拡張する構造パターンである。 hb
使用しないプラットフォーム向けのコードも最終的なバンドルに含まれることになるので、コードのサイズが増大する。
CPUバウンドな処理の途中でイベントループに制御を戻す。
一方向メッセージ通信のパターン。分散オブザーバーパターンに他ならない。
https://www.amazon.co.jp/dp/4873118735
2019年出版と古くdenoやbunなども出てきているが、コアの部分はまあNodejsについてちゃんと理解しておくのも良いことだなと思い購入。