web-dev-qa-db-ja.com

NodeJSは本当にシングルスレッドですか?

Node.jsは、スレッドの代わりにイベントループを使用して、イベントベースのモデルをコアに配置することにより、「接続ごとの1つのスレッドの問題」を解決します。負荷の高いI/O操作はすべて、開始された操作が完了すると実行されるコールバックを使用して、常に非同期で実行されます。

操作が発生した場合の監視は、epoll()などの多重化メカニズムによって処理されます。

私の質問は今です:

  • ブロッキングシステムコールの選択/ epoll/kqueueの使用中にNodeJSがブロックしないのはなぜですか?

  • または、NodeJSシングルスレッドではないため、2番目のスレッドは
    select/epoll/kqueueですべてのI/O操作を監視する必要がありますか?

59
Filipe Santos

NodeJSはeventedwebsite の2行目)であり、シングルスレッドではありません。これは、ユーザーが明示的に管理する必要なく、select/epoll/kqueue処理を行うために必要なスレッドを内部的に処理しますが、スレッド内での使用がないという意味ではありません。

108
Femi

番号。

I/O操作が開始されると、それらはlibuvに委任され、独自の(マルチスレッド、非同期)環境を使用して要求を管理します。 libuvはI/O操作の完了を通知し、このイベントを待機しているコールバックをメインV8スレッドに再導入して実行できるようにします。

V8->デリゲートI/O(libuv)->スレッドプール->マルチスレッド非同期

8
serkan

JavaScriptはシングルスレッドなので、イベントモデルです。しかし、Nodeスタックはシングルスレッドではありません。

ノードは、並行性のためにV8エンジンを利用します。

0

Nodejsは全体としてシングルスレッドではありませんが、Node-Eventループ(nodeJSが頻繁に使用)はシングルスレッドです

ノードフレームワーク/標準ライブラリの一部はシングルスレッドではありません

0
yaswanthkoneri