10

Rubyでは、Thread#runThread#wakupの違いは何ですか?

RDocは、スケジューラーがThread#wakeupで呼び出されないことを指定していますが、それはどういう意味ですか?ウェイクアップ実行をいつ使用するかの例?ありがとう。

編集:Thread#wakupによってスレッドが実行可能になることがわかりますが、Thread#runが実行されるまで(とにかくスレッドをウェイクアップする)実行されない場合はどうなり
ます

誰かがウェイクアップが何か意味のあることをする例を教えてもらえますか?好奇心のために=)

4

1 に答える 1

4

これが何を意味するかを説明する例を次に示します (ここからのコード例)。

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 = 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
于 2012-10-06T21:03:50.983 に答える