2012-10-06 31 views
9

Trong Ruby, sự khác biệt giữa Thread#runThread#wakup là gì?Sự khác nhau giữa Thread # run và Thread # wakeup?

RDoc chỉ định rằng trình lên lịch không được gọi với Thread # wakeup, nhưng điều đó có nghĩa là gì? Ví dụ về thời điểm sử dụng wakeup vs chạy? Cảm ơn.

EDIT:
Tôi thấy rằng Thread#wakup gây thread để trở thành Runnable, nhưng có ý nghĩa gì nếu nó sẽ không thực hiện cho đến khi Thread#run được thực hiện (trong đó tỉnh dậy thread anyway)?

Ai đó có thể vui lòng cung cấp ví dụ khi đánh thức có điều gì đó có ý nghĩa không? Vì lợi ích của sự tò mò của =)

Trả lời

3

Dưới đây là một ví dụ để minh họa cho ý nghĩa của nó (Mã số ví dụ từ here):

Thread.wakeup

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

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

Kết quả trên chỉ ra rằng các chủ đề mới được tạo đang ngủ vì lệnh dừng.

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

Đầu ra này cho biết luồng không ngủ nữa và có thể chạy.

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

Bây giờ, chuỗi tiếp tục thực hiện và in ra chuỗi.

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

Các chủ đề không chỉ tỉnh dậy mà còn tiếp tục thực hiện và in ra chuỗi.

$ thread.run 
ThreadError: killed thread 
+2

Cảm ơn. Tôi thấy rằng _wakeup_ làm cho thread trở thành _runnable_, nhưng việc sử dụng nó là gì nếu nó không chạy cho đến khi ai đó lên lịch sử dụng _run_, nó vẫn đánh thức luồng đó? –

+3

Bạn có thể vui lòng hiển thị ví dụ trong đó 'đánh thức' có ý nghĩa gì đó không? –

+0

nó có liên quan đến bộ lập lịch trình. đây là từ các tài liệu: "Lưu ý: Điều này không gọi trình lên lịch, hãy xem chạy để biết thêm thông tin." – phoet

Các vấn đề liên quan