Nei server Web basati su PHP (o Java / ASP.NET / Ruby) ogni richiesta client viene istanziata su un nuovo thread. Ma in Node.js tutti i client girano sullo stesso thread (possono persino condividere le stesse variabili!) Comprendo che le operazioni di I / O sono basate sugli eventi, quindi non bloccano il loop del thread principale.
Quello che non capisco è PERCHÉ l'autore di Node ha scelto di essere single thread? Rende le cose difficili. Ad esempio, non riesco a eseguire una funzione intensiva della CPU perché blocca il thread principale (e le nuove richieste client sono bloccate), quindi devo generare un processo (il che significa che devo creare un file JavaScript separato ed eseguire un altro processo nodo su esso). Tuttavia, in PHP cpu le attività intensive non bloccano altri client perché, come ho già detto, ogni client si trova su un thread diverso. Quali sono i suoi vantaggi rispetto ai server web multi-thread?
Nota: ho usato il clustering per aggirare questo, ma non è carino.
node -e 'setTimeout(()=>{},1000);' & ps -T h $! | wc -l; kill $!visualizza cinque thread sul mio sistema. Il ciclo di eventi principale è a thread singolo (non avrebbe molto senso se non lo fosse) ma Node è fortemente multi-thread e puoi scrivere applicazioni a singolo processo multi-thread se lo desideri. Mi piacerebbe scrivere una risposta esauriente al riguardo, ma alcune persone hanno deciso di chiudere la tua domanda, quindi non posso. Sto votando per riaprirlo. Se ottiene più voti e viene riaperto, per favore menzionami nel commento.