1. ホーム
  2. node.js

node.jsの仕組みは?

2023-10-10 07:52:30

質問

nodejsについていくつかわからないことがあります。どの情報源も、node.jsはスレッドロックやコンテキストスイッチがないため、標準的なスレッドのウェブサーバーよりもスケーラブルだと言っていますが、もしnode.jsがスレッドを使用しないなら、どのようにして並行リクエストを処理するのでしょうか?イベントI/Oモデルとは何を意味するのでしょうか?

あなたの助けはとても感謝しています。 ありがとうございます。

どのように解決するのですか?

Nodeは完全にイベントドリブンです。基本的にサーバは1つのスレッドが次から次へとイベントを処理することで成り立っています。

新しいリクエストが入ってくるのはイベントの一種です。サーバーはその処理を開始し、ブロックされた IO 操作があるときは、それが完了するまで待たず、代わりにコールバック関数を登録します。その後、サーバーはすぐに別のイベント(別のリクエストかもしれません)の処理を開始します。IO 操作が終了すると、それは別の種類のイベントであり、サーバーは時間ができるとすぐにコールバックを実行してそれを処理します (つまり、リクエストの処理を続けます)。

そのため、サーバーは追加のスレッドを作成したり、スレッド間を切り替えたりする必要がなく、オーバーヘッドが非常に少なくなっています。複数のハードウェアコアをフル活用したい場合は、node.jsのインスタンスを複数起動すればよいのです。

更新 最下層(JavascriptではなくC++のコード)にて。 には実際に複数のスレッドがあり IOワーカーのプールがあり、IO割り込みを受け取り、対応するイベントをメインスレッドで処理するためのキューに入れるのがその仕事です。これにより、メインスレッドが割り込まれることを防いでいます。