2012-10-06 14 views
9

En Ruby, ¿cuál es la diferencia entre Thread#run y Thread#wakup?Diferencia entre el hilo # ejecutar y el hilo # despertar?

El RDoc especifica que el programador no se invoca con Thread # wakeup, pero ¿qué significa eso? Un ejemplo de cuándo usar despertar vs ejecutar? Gracias.

EDIT:
veo que Thread#wakup hace que el hilo se convierta en ejecutable, pero ¿para qué sirve si el que no va a ejecutar hasta que se ejecuta Thread#run (que despierta el hilo de todos modos)?

¿Podría alguien dar un ejemplo en el que wakeup hace algo significativo? Por el bien de la curiosidad =)

Respuesta

3

Aquí se muestra un ejemplo para ilustrar lo que significa (ejemplo Código de here):

Thread.wakeup

thread = Thread.new do 
    Thread.stop 
    puts "Inside the thread block" 
end 

$ thread 
=> #<Thread:0x100394008 sleep> 

La salida anterior indica que el hilo recién creado está dormido debido al comando de detención.

$ thread.wakeup 
=> #<Thread:0x100394008 run> 

Esta salida indica que el hilo no está durmiendo más y puede ejecutarse.

$ thread.run 
Inside the thread block 
=> #<Thread:0x1005d9930 sleep> 

Ahora el hilo continúa la ejecución e imprime la cadena.

$ thread.run 
ThreadError: killed thread 

Thread.run

thread = Thread.new do 
    Thread.stop 
    puts "Inside the thread block" 
end 

$ thread 
=> #<Thread:0x100394008 sleep> 

$ thread.run 
Inside the thread block 
=> #<Thread:0x1005d9930 sleep> 

El hilo no sólo se despierta, pero también continúa la ejecución e imprime la cadena.

$ thread.run 
ThreadError: killed thread 
+2

Gracias. Veo que _wakeup_ hace que el hilo se convierta en _runnable_, pero ¿de qué sirve si no se va a ejecutar hasta que alguien lo programe con _run_, lo que despierta el hilo de todos modos? –

+3

¿Podría mostrar un ejemplo en el que 'despertar' haga algo significativo? –

+0

tiene algo que ver con el programador de hilos. esto es de los documentos: "Nota: Esto no invoca al programador, consulte ejecutar para obtener más información". – phoet

Cuestiones relacionadas