He leído toneladas de material en la web sobre la seguridad y el rendimiento de los hilos en diferentes versiones de ruby y rieles, y creo que entiendo muy bien estas cosas en este momento.¿Cómo implementar una aplicación Rails asíncrona segura para hilos?
Lo que parece extrañamente falta en las discusiones es cómo implementar realmente una aplicación de Rails asíncrona. Cuando se habla de roscas y sincronicidad en una aplicación, hay dos cosas que la gente quiere optimizar:
- utilizando todos los núcleos de la CPU con un uso mínimo de memoria RAM
- ser capaz de servir a las nuevas peticiones mientras que las solicitudes anteriores están a la espera de IO
El punto 1 es donde la gente se emociona (correctamente) con JRuby. Para esta pregunta sólo estoy tratando de optimizar el punto 2.
decir que este es el único controlador en mi aplicación:
TheController < ActionController::Base
def fast
render :text => "hello"
end
def slow
render :text => User.count.to_s
end
end
fast
no tiene IO y se puede servir a cientos o miles de peticiones por segundo, y slow
tiene que enviar una solicitud a través de la red, esperar a que se realice el trabajo, luego recibir la respuesta a través de la red y, por lo tanto, es mucho más lenta que fast
.
Así que una implementación ideal permitiría que se cumplan cientos de solicitudes a fast
mientras una solicitud a slow
está esperando en IO.
Lo que parece faltar en las discusiones en la web es qué capa de la pila es responsable de habilitar esta concurrencia. thin tiene un indicador --threaded
, que "Llamará a la aplicación Rack en hilos [experimentales]" - ¿eso inicia un nuevo hilo para cada solicitud entrante? ¿Enrollar las instancias de la aplicación en rack en los hilos que persisten y esperar las solicitudes entrantes?
¿Es delgada la única manera o hay otras? ¿Importa el tiempo de ejecución de ruby para optimizar el punto 2?
Dudo que tu versión de rubí tenga mucho que decir con respecto al punto 2. Esto dependería más de la implementación de simultaneidad del servidor y de cómo se ensamblan los rieles. – providence