multithreading - sistemas - Cuál es la diferencia entre Trabajadores y Hilos en Puma
mapa comparativo entre un proceso y los hilos (2)
Como dice la otra respuesta, este artículo de Heroku es bastante bueno con explicaciones de ciertos elementos de configuración.
Sin embargo, si necesita ajustar su aplicación en Heroku, o en cualquier lugar, vale la pena saber cómo funcionan las cosas.
Creo que estás casi en lo cierto cuando dices "un trabajador es un hilo dentro del proceso de puma", creo que un trabajador es un proceso de nivel de sistema operativo bifurcado de puma que luego puede usar hilos internamente.
Por lo que yo entiendo, puma bifurcará el proceso de su sistema operativo, sin embargo, muchas veces se establece a través de la configuración de los workers
para responder a las solicitudes http. Esto le proporciona el paralelismo en términos de manejo de solicitudes múltiples, pero esto usualmente ocupará más memoria ya que ''copiará'' el código de su aplicación para cada trabajador.
Cada trabajador de puma usará múltiples hilos dentro de su proceso de sistema operativo, dependiendo de la configuración de los threads
. Estos agregan concurrencia al permitir que el proceso puma responda a múltiples solicitudes por sí mismo de modo que si un hilo está bloqueado, es decir, procesando una solicitud, puede manejar una nueva solicitud con otro hilo. Como se indicó, esto requiere que toda su aplicación sea segura para la realización de subprocesos, de modo que, por ejemplo, cualquier configuración global de una solicitud no se ''filtre'' en otra.
Sintonizaría puma para que el número de trabajadores fuera adecuado para la cantidad de CPU y memoria disponibles y luego ajuste los subprocesos dependiendo de cuánto desea saturar el host que ejecuta su aplicación y cómo se comporta su aplicación; más no siempre es igual más rápido / más rendimiento de solicitud.
¿Cuál es la diferencia entre un trabajador de puma y un hilo de puma en el contexto de un heroku dyno?
Lo que sé (por favor corrígeme si estoy equivocado):
Delgado no es concurrente, por lo que un proceso web solo puede hacer una solicitud a la vez
En unicornio, sé que puedo tener varios trabajadores de unicornio en un proceso para agregar concurrencia.
Pero en el puma hay hilos y trabajadores ... ¿No es un trabajador un hilo dentro del proceso del puma?
¿Puedo usar más trabajadores / hilos para agregar concurrencia web en Heroku?
Esta es un área grande y no soy un experto, sin embargo ...
Puma puede engendrar muchos trabajadores, y cada trabajador puede usar muchos hilos para procesar la solicitud.
Unicornio no tiene hilos por lo que sé, solo tiene el modelo de trabajador.
Sin embargo, si usa subprocesos, debe asegurarse de que su código sea seguro para subprocesos. Esto significa Rails, cualquier gema en la que confíes y tu propio código.
Para un rendimiento máximo, es posible que también desee examinar JRuby o Rubinius que cuentan con soporte de hilos adecuado. La MRI está restringida por su GIL.
Hay un buen artículo sobre Heroku que explica cómo Puma usa trabajadores e hilos. Probablemente deberías leer eso e ignorarme :)