2011-11-08 3 views
7

リクエストがnodejsサーバーに送信されると、リクエストをどのように処理しますか?NodeJsは非常に多くの着信要求をどのように処理しますか?スレッドプールを使用していますか?

リクエストごとに新しいスレッドを生成しない(または従来のスレッドプールを使用していないと思われる)ため、リクエストの処理方法が異なります。

誰かが私のところで何が起こっているのかを説明することはできますか?そして、ここでは、Linuxの味はどうですか?

答えて

3

ノードは、新たな接続が行われたとき、それが通知されるべきであること(epollkqueue/dev/poll、またはselectを介して)オペレーティングシステムに指示し、それがスリープ状態になります。新しい人が接続すると、コールバックが実行されます。各接続は小さなヒープ割り当てのみです

IOを非同期の方法(非ブロックI/O)で処理するのは「イベント駆動」です。内部ではepollkqueue/dev/poll、またはselectの処理に必要なスレッディングがありますが、ユーザー/クライアントとしては絶対に透過的です。

epollは実際にはスレッドプールではなく、OSのI/Oイベント通知機能であり、node.jsがその上に位置しています。

6

いいえ、それはasync IOです。どこかで何かが起こるまでブロックするスレッドが1つだけあり、そのイベントを処理します。これは、1つのプロセス内の1つのスレッドが多くの同時接続に対応できることを意味します。やや好き

唯一の例外はファイルシステムのものですが、フード内のスレッドプールを使用します。

+0

実際にはシリアル化されていますか?要求が「スリープ」しているとき、どのように起きてスレッドに開始するように指示しますか? – codecompleting

+0

@codecompleting:データがソケットなどに入ったときにOSに通知するように指示できます。 – thejh

+0

NodeJSをマルチスレッド化する利点はありますか?または、基本的に1つのスレッドでCPUを完全に利用できますか? NodeJSは複数のコアを使用できますか? –

関連する問題