Dans les serveurs Web basés sur PHP (ou Java / ASP.NET / Ruby), chaque demande client est instanciée sur un nouveau thread. Mais dans Node.js, tous les clients s'exécutent sur le même thread (ils peuvent même partager les mêmes variables!) Je comprends que les opérations d'E / S sont basées sur des événements afin de ne pas bloquer la boucle de thread principale.
Ce que je ne comprends pas, c'est POURQUOI l'auteur de Node l'a choisi pour être monothread? Cela rend les choses difficiles. Par exemple, je ne peux pas exécuter une fonction gourmande en processeur car elle bloque le thread principal (et les nouvelles demandes des clients sont bloquées), j'ai donc besoin de générer un processus (ce qui signifie que je dois créer un fichier JavaScript séparé et exécuter un autre processus de nœud sur il). Cependant, en PHP, les tâches intensives du processeur ne bloquent pas les autres clients car, comme je l'ai mentionné, chaque client est sur un thread différent. Quels sont ses avantages par rapport aux serveurs Web multi-threads?
Remarque: J'ai utilisé le clustering pour contourner ce problème, mais ce n'est pas joli.
node -e 'setTimeout(()=>{},1000);' & ps -T h $! | wc -l; kill $!affiche cinq threads sur mon système. La boucle d'événement principale est monothread (cela n'aurait pas beaucoup de sens si ce n'était pas le cas), mais Node est fortement multithread et vous pouvez écrire des applications monoprocessus multithread si vous le souhaitez. J'aimerais écrire une réponse complète à ce sujet, mais certaines personnes ont décidé de fermer votre question, donc je ne peux pas. Je vote pour le rouvrir. S'il obtient plus de votes et est rouvert, veuillez me mentionner dans le commentaire.