Nos servidores Web baseados em PHP (ou Java / ASP.NET / Ruby), toda solicitação de cliente é instanciada em um novo encadeamento. Mas no Node.js todos os clientes são executados no mesmo thread (eles podem até compartilhar as mesmas variáveis!) Eu entendo que as operações de E / S são baseadas em eventos, para que não bloqueiem o loop principal do thread.
O que não entendo é POR QUE o autor do Node o escolheu como single-thread? Isso dificulta as coisas. Por exemplo, não consigo executar uma função intensiva da CPU porque ela bloqueia o encadeamento principal (e as novas solicitações do cliente são bloqueadas), por isso preciso gerar um processo (o que significa que preciso criar um arquivo JavaScript separado e executar outro processo de nó no isto). No entanto, no PHP, as tarefas intensivas da CPU não bloqueiam outros clientes porque, como mencionei, cada cliente está em um segmento diferente. Quais são as suas vantagens em comparação com servidores Web multiencadeados?
Nota: usei o clustering para contornar isso, mas não é bonito.
node -e 'setTimeout(()=>{},1000);' & ps -T h $! | wc -l; kill $!
exibe cinco threads no meu sistema. O loop do evento principal é de thread único (não faria muito sentido se não fosse), mas o Node é altamente multi-thread e você pode escrever aplicativos de processo único multi-thread, se desejar. Eu adoraria escrever uma resposta abrangente sobre isso, mas algumas pessoas decidiram encerrar sua pergunta, então não posso. Estou votando para reabri-lo. Se conseguir mais votos e reabrir, mencione-me no comentário.