Node.js がシングルスレッドなのはなぜですか? [closed] 質問する

Node.js がシングルスレッドなのはなぜですか? [closed] 質問する

PHP (または Java/ASP.NET/Ruby) ベースの Web サーバーでは、すべてのクライアント要求が新しいスレッドでインスタンス化されます。ただし、Node.js では、すべてのクライアントが同じスレッドで実行されます (同じ変数を共有することもできます)。I/O 操作はイベントベースであるため、メイン スレッド ループをブロックしないことを理解しています。

理解できないのは、Node の作者がなぜシングルスレッドを選択したかです。これは物事を難しくします。たとえば、CPU を集中的に使用する関数はメインスレッドをブロックするため実行できません (新しいクライアント要求がブロックされます)。そのため、プロセスを生成する必要があります (つまり、別の JavaScript ファイルを作成し、その上で別のノードプロセスを実行する必要があります)。ただし、PHP では、前述のように各クライアントが異なるスレッド上にあるため、CPU を集中的に使用するタスクは他のクライアントをブロックしません。マルチスレッド Web サーバーと比較して、その利点は何ですか?

注: これを回避するためにクラスタリングを使用しましたが、あまりきれいではありません。

ベストアンサー1

Node.js は、非同期処理の実験として明確に作成されました。理論上は、単一のスレッドで非同期処理を行うと、一般的な Web 負荷において、一般的なスレッドベースの実装よりも高いパフォーマンスとスケーラビリティを実現できるというものでした。

そして、ご存知ですか? 私の意見では、その理論は実証されています。CPU を集中的に使用する処理を行わない node.js アプリは、Apache や IIS、その他のスレッドベースのサーバーよりも数千も多くの同時接続を実行できます。

シングル スレッドで非同期な性質は、確かに物事を複雑にします。しかし、スレッド化よりも複雑だと本気で思っていますか? 競合状態が 1 つ発生するだけで、1 か月が台無しになることもあります。あるいは、どこかの設定が原因でスレッド プールが空になり、応答時間が極端に遅くなることもあります。デッドロック、優先順位の逆転、マルチスレッド化に伴うその他のすべての問題は言うまでもありません。

結局のところ、一概にどちらが良いとか悪いとかいうことはないと思います。それぞれに違いがあり、時には良く、時には良くないこともあります。仕事には適切なツールを使いましょう。

おすすめ記事