2012-04-01 17 views
5

Tengo una aplicación Rails de un solo hilo ejecutándose en modo Thin Single-thread en Heroku Cedar.¿Cómo está manejando mi aplicación Rails de subproceso único solicitudes concurrentes?

Mientras hago una gran solicitud POST (una carga de archivo) que lleva más de un minuto, puedo hacer otras solicitudes GET al mismo tiempo.

El soporte de Heroku me asegura que su capa de enrutamiento no almacena la solicitud y luego la envía de una vez (que es el comportamiento de muchos proxies, como nginx). Insisten en que mi aplicación está manejando solicitudes simultáneas.

¿Qué está pasando aquí?

Respuesta

6

Thin está construido sobre EventMachine, que proporciona IO basado en eventos.

Esto significa que Thin realiza una recepción asincrónica de su solicitud POST mientras atiende solicitudes GET mientras tanto. Cuando se cargan datos POST, Thin pasa a pasarlo a Rails (donde se procesa de forma síncrona y bloquea otras solicitudes hasta que finaliza).

+0

interesante - si es cierto, me sorprende que este comportamiento de delgadamente no se hable más. es como si tuviese su pequeño mini proxy al frente, lo que mejora la simultaneidad. ¿sabes qué parte del código delgado podría ver para entender este comportamiento? –

+0

No busqué en el código de thin, pero, lógicamente, debería ser una capa de red. No sé si es fácil identificar esto en las fuentes. –

+0

Parece el creador de la delgada concurs: https://groups.google.com/forum/#!msg/thin-ruby/uKLD-qob6Kc/gH8b4MPATI8J –

Cuestiones relacionadas