node.jsの仕組みは?
質問
nodejsについていくつかわからないことがあります。どの情報源も、node.jsはスレッドロックやコンテキストスイッチがないため、標準的なスレッドのウェブサーバーよりもスケーラブルだと言っていますが、もしnode.jsがスレッドを使用しないなら、どのようにして並行リクエストを処理するのでしょうか?イベントI/Oモデルとは何を意味するのでしょうか?
あなたの助けはとても感謝しています。 ありがとうございます。
どのように解決するのですか?
Nodeは完全にイベントドリブンです。基本的にサーバは1つのスレッドが次から次へとイベントを処理することで成り立っています。
新しいリクエストが入ってくるのはイベントの一種です。サーバーはその処理を開始し、ブロックされた IO 操作があるときは、それが完了するまで待たず、代わりにコールバック関数を登録します。その後、サーバーはすぐに別のイベント(別のリクエストかもしれません)の処理を開始します。IO 操作が終了すると、それは別の種類のイベントであり、サーバーは時間ができるとすぐにコールバックを実行してそれを処理します (つまり、リクエストの処理を続けます)。
そのため、サーバーは追加のスレッドを作成したり、スレッド間を切り替えたりする必要がなく、オーバーヘッドが非常に少なくなっています。複数のハードウェアコアをフル活用したい場合は、node.jsのインスタンスを複数起動すればよいのです。
更新 最下層(JavascriptではなくC++のコード)にて。 には実際に複数のスレッドがあり IOワーカーのプールがあり、IO割り込みを受け取り、対応するイベントをメインスレッドで処理するためのキューに入れるのがその仕事です。これにより、メインスレッドが割り込まれることを防いでいます。
関連
-
[解決済み] node.jsのセットアップウィザードが途中で終了してしまう
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsで終了する方法
-
[解決済み] Node.jsでファイルを書き込む
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み] Node.jsで環境変数を読み込む
-
[解決済み] Node.jsのnpmモジュールをアンインストールするにはどうすればよいですか?
-
[解決済み】Node.jsは内部でThreadsに依存しているのに、どうして本質的に高速なのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リソースの読み込みに失敗しました: net::ERR_CONNECTION_REFUSED : Nodejs
-
[解決済み】 console.logの出力をどこに永久保存するか?
-
[解決済み】モジュール '@babel/core' が見つかりません。
-
[解決済み】passport.js passport.initialize() ミドルウェアが使用されていません。
-
[解決済み] http-server コマンドが見つかりません。
-
[解決済み] エラーです。Expressでビューの検索に失敗しました
-
[解決済み] エラーです。Ionic使用中にモジュール '../lib/utils/unsupported.js' が見つかりません。
-
[解決済み] node.js - リクエスト - "emitter.setMaxListeners() "はどのように?
-
[解決済み] Mongoose Schema がモデルとして登録されていません。
-
[解決済み】Node.jsのシングルスレッド・ノンブロッキングIOモデルの動作について