在 Ruby 中,Thread#run和Thread#wakup 有什么区别?
RDoc 指定不使用 Thread#wakeup 调用调度程序,但这意味着什么?何时使用唤醒与运行的示例?谢谢。
编辑:
我看到Thread#wakup导致线程变得可运行,但是如果在执行Thread#run之前它不会执行(无论如何都会唤醒线程),那么它有什么用?
有人可以提供一个例子,唤醒做一些有意义的事情吗?出于好奇=)
在 Ruby 中,Thread#run和Thread#wakup 有什么区别?
RDoc 指定不使用 Thread#wakeup 调用调度程序,但这意味着什么?何时使用唤醒与运行的示例?谢谢。
编辑:
我看到Thread#wakup导致线程变得可运行,但是如果在执行Thread#run之前它不会执行(无论如何都会唤醒线程),那么它有什么用?
有人可以提供一个例子,唤醒做一些有意义的事情吗?出于好奇=)
这是一个示例来说明它的含义(来自此处的代码示例):
线程唤醒
thread = Thread.new do
Thread.stop
puts "Inside the thread block"
end
$ thread
=> #<Thread:0x100394008 sleep>
上面的输出表明新创建的线程因为停止命令而处于休眠状态。
$ thread.wakeup
=> #<Thread:0x100394008 run>
此输出表明线程不再处于休眠状态,并且可以运行。
$ thread.run
Inside the thread block
=> #<Thread:0x1005d9930 sleep>
现在线程继续执行并打印出字符串。
$ thread.run
ThreadError: killed thread
线程运行
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