1. ホーム
  2. multithreading

[解決済み] 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に負荷のかかるコードがあったとしても、他のリクエストはすべてブロックされます。

続きを読む