Aaron Patterson (@tenderlove) utiliza un ejemplo casi exactamente como la suya para describir exactamente por qué puede y debe hilos de uso para lograr la concurrencia en su situación.
La mayoría de las bibliotecas de E/S ahora son lo suficientemente inteligentes como para liberar el GVL (Global VM Lock, o la mayoría de la gente lo conoce como GIL o Global Interpreter Lock) cuando se hace IO. Hay una llamada a función simple en C para hacer esto. No necesita preocuparse por el código C, pero para usted esto significa que la mayoría de las bibliotecas IO que valen la pena liberarán el GVL y permitirán que se ejecuten otros subprocesos mientras que el subproceso que está haciendo el IO espera a que los datos vuelvan .
Si lo que acabo de decir es confuso, no tiene por qué preocuparse demasiado. Lo principal que necesita saber es que si está utilizando una biblioteca decente para hacer sus solicitudes HTTP (o cualquier otra operación de E/S para ese asunto ... base de datos, comunicación entre procesos, lo que sea), el intérprete de Ruby (MRI) es lo suficientemente inteligente como para poder liberar el bloqueo en el intérprete y permitir que se ejecuten otros subprocesos, mientras que un subproceso espera que IO regrese. Si el siguiente hilo tiene su propio IO para agarrar, el intérprete de Ruby hará lo mismo (suponiendo que la biblioteca de IO está construida para utilizar esta característica de Ruby, que creo que la mayoría son actualmente).
Por lo tanto, para resumir lo que estoy diciendo, ¡use hilos! Debería ver el beneficio de rendimiento. De lo contrario, verifique si su biblioteca http está utilizando la función rb_thread_blocking_region() en C y, de no ser así, descubra por qué no. Tal vez hay una buena razón, quizás deba considerar usar una mejor biblioteca.
El enlace al video Aaron Patterson está aquí: http://www.youtube.com/watch?v=kufXhNkm5WU
Vale la pena un reloj, aunque sólo sea por las risas, como Aaron Patterson es una de las personas más divertidas en Internet.
Entonces, ¿alguien puede comentar acerca de las fibras? ¿Estoy en lo cierto al suponer que las fibras no tienen poderes de "hacer cosas en el fondo"? –