2010-10-01 18 views

Respuesta

2

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.

+2

Aunque YARV (ruby 1.9) solo usa una CPU a la vez, no creo que use hilos verdes. –

+3

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

20

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.

+0

¿Recibió alguna respuesta? –

+2

Ni siquiera puedo recordar si pregunté ahora ... – rogerdpack

3

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.

+0

Exactamente. Grupo de hilos, hilos verdes, inútil. – Joshua

+14

Seguramente no tiene sentido si tienes algún bloqueo IO? –

+0

@Andy buen punto. –

Cuestiones relacionadas