[解決済み] Nodejsのシングルスレッドの意味するところ
2022-03-13 16:15:23
質問
Nodeは1スレッドで動くとよく聞きます。しかし、私が理解していないのは、nodeがどうして1つのスレッドでノンブロッキングを行えるのかということです。例えば、nodeのWebサーバーに100の同時リクエストがあり、サーバーはリクエストを処理するために100のコールバックを生成するとします。100のコールバックがそれぞれ完了するのに1秒かかり、それらがすべて1つのスレッドにある場合、それらは連続して行われなければならず、それは100秒間ブロックするということでしょうか?
解決方法は?
ブログより node.jsのイベントループを理解する
現在のプログラミング技術における最大の無駄は、I/Oの完了を待つことにあります。
- 同期:一度に一つのリクエストを順番に処理する。長所:シンプル 短所:一つのリクエストが他の全てのリクエストの足かせになる
-
fork() は Unix プログラマのハンマーです。これがあるおかげで、あらゆる問題が釘のように見えるのです。大抵はオーバーキル
-
長所:簡単で、fork を使うよりもカーネルに優しい。短所:あなたのマシンにはスレッドがないかもしれないし、スレッドプログラミングは共有リソースへのアクセスの制御について心配しながら、非常に速く非常に複雑になることがあります。
Node.jsは、あなたのコードのためにシングルスレッドを維持します...
並列にコードを実行することはできません。たとえば、"sleep "を実行すると、サーバーが1秒間ブロックされます。
while(new Date().getTime() < now + 1000) {
// do nothing
}
つまり、このコードが実行されている間、node.jsはクライアントからの他のリクエストに応答しません。なぜなら、あなたのコードを実行するためのスレッドは1つだけだからです。また、例えば画像のサイズを変更するようなCPUに負荷のかかるコードがあったとしても、他のリクエストはすべてブロックされます。
関連
-
[解決済み] 他のスレッドからGUIを更新するにはどうすればよいですか?
-
[解決済み] Nodejsのシングルスレッドの意味するところ
-
[解決済み] npm installの-saveオプションは何ですか?
-
[解決済み] Javaにおける "implements Runnable "と "extends Thread "の違いについて
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] プロセスとスレッドの違いは何ですか?
-
[解決済み] シンクロナイズド」とはどういう意味ですか?
-
[解決済み] 一般的に、Node.jsは10,000の同時リクエストをどのように処理するのですか?
-
[解決済み】Node.jsのシングルスレッド・ノンブロッキングIOモデルの動作について
-
[解決済み] デッドロックとは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
コレクションが変更されたため、列挙操作が実行できない場合がある Error
-
[解決済み] Nodejsのシングルスレッドの意味するところ
-
[解決済み] レースコンディションとは何ですか?
-
[解決済み] スレッドは何本までならOK?
-
[解決済み】Node.jsのシングルスレッド・ノンブロッキングIOモデルの動作について
-
[解決済み] 再帰的ロック (Mutex) vs 非再帰的ロック (Mutex)
-
[解決済み] スレッドセーフとは何ですか?
-
[解決済み] 非同期とマルチスレッド - 違いはあるのか?
-
[解決済み] Powershellでコマンドを並列に実行することはできますか?
-
[解決済み] ノンブロッキングI/Oは、マルチスレッドのブロッキングI/Oより本当に速いのか?どのように?