PHP(またはJava / ASP.NET / Ruby)ベースのWebサーバーでは、すべてのクライアント要求が新しいスレッドでインスタンス化されます。しかし、Node.jsでは、すべてのクライアントが同じスレッドで実行されます(同じ変数を共有することさえできます!)I / O操作はイベントベースであるため、メインスレッドのループをブロックしないことを理解しています。
私が理解していないのは、Nodeの作成者がシングルスレッドを選択した理由は何ですか?それは物事を困難にします。たとえば、メインスレッドをブロックする(そして新しいクライアント要求がブロックされる)ため、CPU集中型の関数を実行できないため、プロセスを生成する必要があります(つまり、別のJavaScriptファイルを作成して別のノードプロセスを実行する必要があります)それ)。ただし、PHPでは、CPUを集中的に使用するタスクは他のクライアントをブロックしません。マルチスレッドWebサーバーと比較した場合の利点は何ですか?
注:私はこれを回避するためにクラスタリングを使用しましたが、それはきれいではありません。
node -e 'setTimeout(()=>{},1000);' & ps -T h $! | wc -l; kill $!表示されます。メインイベントループはシングルスレッドです(そうでなかったとしてもあまり意味がありません)が、Nodeはマルチスレッド化されており、必要に応じてマルチスレッドのシングルプロセスアプリケーションを作成できます。私はそれについて包括的な答えを書きたいと思いますが、私ができないようにあなたの質問を閉じることに決めた人もいます。再開することに投票します。投票数が増えて再開された場合は、コメントで教えてください。