Tengo un programa que crea 10000 hilos a la vez, y ejecuta 8 al mismo tiempo.¿Por qué Ruby no tiene un ThreadPool incorporado?
Pero ruby no tiene un ThreadPool incorporado como Java. ¿Hay una buena razón?
Tengo un programa que crea 10000 hilos a la vez, y ejecuta 8 al mismo tiempo.¿Por qué Ruby no tiene un ThreadPool incorporado?
Pero ruby no tiene un ThreadPool incorporado como Java. ¿Hay una buena razón?
Lo más probable es que el motivo sea porque el rubí no tiene hilos "reales". Tiene lo que se llama hilos verdes. El intérprete de ruby se encarga de programar los hilos de ejecución sin utilizar ningún subproceso del sistema operativo subyacente. Esto efectivamente hace Ruby single threaded.
Aunque YARV (ruby 1.9) solo usa una CPU a la vez, no creo que use hilos verdes. –
Los subprocesos verdes no hacen inútiles los grupos de subprocesos. Un hilo puede estar esperando algo externo al programa, durante el cual se puede programar otro hilo. El uso de hilos verdes a menudo es (por lo general?) Más eficiente que el procesamiento secuencial. – Kelvin
probablemente porque es fácil hacer su propio uso de la biblioteca estándar de la clase "Queue".
q = Queue.new
3.times { Thread.new { while something = q.pop(true) rescue nil; ... }
Aunque es una buena pregunta, podría sugerir que aparezca con Ruby Core.
¿Recibió alguna respuesta? –
Ni siquiera puedo recordar si pregunté ahora ... – rogerdpack
Mi sospecha sería porque un ThreadPool no sería tan útil en las implementaciones basadas en C de Ruby. Puede utilizar solo un procesador a la vez con Ruby Intepreter de Matz o Yet Another Ruby VM.
Si desea que varios subprocesos se ejecuten en varios procesadores, debe utilizar JRuby en su lugar.
Exactamente. Grupo de hilos, hilos verdes, inútil. – Joshua
Seguramente no tiene sentido si tienes algún bloqueo IO? –
@Andy buen punto. –
Sí, estaba pensando algo similar al ExecutorService de Java. – JohnMerlino