En servidores web basados en PHP (o Java / ASP.NET / Ruby), cada solicitud de cliente se instancia en un nuevo hilo. Pero en Node.js todos los clientes se ejecutan en el mismo subproceso (¡incluso pueden compartir las mismas variables!) Entiendo que las operaciones de E / S están basadas en eventos, por lo que no bloquean el bucle del subproceso principal.
Lo que no entiendo es ¿POR QUÉ el autor de Node lo eligió para un solo subproceso? Hace las cosas difíciles. Por ejemplo, no puedo ejecutar una función intensiva de CPU porque bloquea el subproceso principal (y las nuevas solicitudes de los clientes están bloqueadas), así que necesito generar un proceso (lo que significa que necesito crear un archivo JavaScript separado y ejecutar otro proceso de nodo en eso). Sin embargo, en PHP, las tareas intensivas de la CPU no bloquean a otros clientes porque, como mencioné, cada cliente está en un hilo diferente. ¿Cuáles son sus ventajas en comparación con los servidores web multiproceso?
Nota: He usado el agrupamiento para evitar esto, pero no es bonito.
node -e 'setTimeout(()=>{},1000);' & ps -T h $! | wc -l; kill $!muestra cinco hilos en mi sistema. El bucle de eventos principal es de un solo subproceso (no tendría mucho sentido si no lo fuera), pero Node tiene muchos subprocesos múltiples y puede escribir aplicaciones de un solo proceso de subprocesos múltiples si lo desea. Me encantaría escribir una respuesta integral al respecto, pero algunas personas decidieron cerrar su pregunta, por lo que no puedo. Estoy votando para reabrirlo. Si obtiene más votos y se vuelve a abrir, por favor, mencióneme en el comentario.