Thread#run和Thread #wakeup之间的区别?

时间:2012-10-06 20:30:33

标签: ruby multithreading

在Ruby中,Thread#runThread#wakup之间有什么区别?

RDoc指定不使用Thread #wakeup调用 scheduler ,但这意味着什么?何时使用唤醒 vs 运行的示例?感谢。

修改
我看到Thread#wakup导致线程变为可运行,但是如果它在执行Thread#run之前不会执行(它会唤醒线程)会有什么用呢?

有人可以提供 wakeup 做一些有意义的事情的例子吗?出于好奇心的缘故=)

1 个答案:

答案 0 :(得分:3)

以下是一个示例,用于说明其含义(来自here的代码示例):

<强> Thread.wakeup

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

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

上面的输出表明由于stop命令,新创建的线程处于睡眠状态。

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

此输出表明线程不再处于休眠状态,并且可以运行。

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

现在线程继续执行并打印出字符串。

$ 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>   

线程不仅会唤醒,还会继续执行并打印出字符串。

$ thread.run
ThreadError: killed thread