
Estaba leyendo sobre cómo se asignan los subprocesos del usuario a los subprocesos del kernel enWikipedia. De este artículo entiendo que FreeBSD usa 1:1 (subprocesamiento a nivel de kernel).
Por lo tanto, cada hilo de usuario creado por la aplicación se asigna a un hilo del kernel. Si asumo que estoy construyendo un servidor web que manejará cada nueva solicitud en un hilo y estoy ejecutando FreeBSD, ¿aumentar la cantidad de núcleos mejorará el rendimiento general de la aplicación?
He leído esta preguntaNúcleos de CPU: ¿Cuantos más, mejor?, pero quiero que el alcance de las respuestas se vea influenciado específicamente por el mapeo 1:1 entre los subprocesos del usuario y del kernel.
Respuesta1
La respuesta corta es sí.
La respuesta larga es... tener más núcleos de CPU significa tener más potencia de procesamiento. En el caso de una aplicación web PHP/Ruby/Python/etc., significa más recursos para manejar conexiones simultáneas. Tener más núcleos realmente marca la diferencia en caso de una aplicación con mucha carga.
Mi opinión personal es que en caso de elegir entre más potencia de procesamiento y más RAM, elijo más RAM en la mayoría de los casos. Con la RAM, puedes reducir el cuello de botella que es la E/S del disco.
Mediante el uso de sistemas de caché comoPHPAPC,Barniz, yajuste de MySQL(caché de tabla, caché de consultas, etc.), puede mejorar enormemente el rendimiento de su sitio web sin necesitar más potencia de CPU para generar contenido.
Si su sitio web se puede almacenar en caché, elija esta opción. Simplemente aumentar el número de núcleos de CPU es una opción perdida a largo plazo.
Respuesta2
Sí.
El software de servidor web moderno utiliza un proceso o subproceso independiente para cada computadora que se conecta al servidor. Además, el software backend como MySQL o PHP también se ejecuta en procesos o subprocesos separados para cada usuario al que necesita dar servicio, por lo que tener más núcleos siempre ayuda.
Por supuesto, en entornos más intensivos, el rendimiento del disco, la memoria o el ancho de banda de la red pueden acabar convirtiéndose en cuellos de botella. Más memoria permite más almacenamiento en caché de lectura, lo que reducirá los accesos al almacenamiento en disco lento. Como sugiere Biapy, si maneja muchas solicitudes por segundo, debe buscar un software de almacenamiento en caché especializado como Varnish, que reducirá en gran medida la carga del sistema.
Respuesta3
Como siempre, la respuesta será que depende.
Por ejemplo, elnginxServidor webfunciona muy bien, aunque no utiliza hilos. En su lugar, utiliza una arquitectura basada en eventos. Puede utilizar y utiliza varios procesos de trabajo, por lo que puede utilizar varios núcleos.
Como puede ver en las mediciones de rendimiento vinculadas, el servidor web Apache con subprocesos genera más subprocesos y utiliza más memoria si aumenta la cantidad de conexiones simultáneas. La cantidad de memoria utilizada por nginx se mantiene bastante constante. Y en la cantidad de solicitudes atendidas por segundo, nginx supera a Apache por un amplio margen.
Entonces los hilos no siempre son la mejor solución.
El rendimiento también depende de dónde residen sus datos. Si está estacionado en un disco duro, el acceso será lento en comparación con cuando está en la RAM, que a su vez es mucho más lenta que la caché del procesador. Si desea acelerar su servidor web, considere usar un acelerador comobarniz. Considere leerEste artículopor el autor principal de Barniz sobre el rendimiento en el servicio web. El mensaje aquí es que debesusarlos mecanismos de almacenamiento en caché integrados del sistema operativo y que no debe intentar hacer el mismo trabajo usted mismo.