2015-12-04 15 views
6

Tôi đang sử dụng vòng lặp để chờ ngắt bàn phím và sau đó cho phép hoạt động dọn dẹp trước khi thoát trong môi trường nhiều luồng.`loop {}` so với `vòng lặp {ngủ 1}`

begin 
    loop {} 
rescue Interrupt 
    p "Ctr-C Pressed..Cleaning Up & Shutting Down" 
    loop do 
    break if exit_bool.false? 
    end 
    exit 130 
end 

Đoạn mã này chạy trong chuỗi chính. Có nhiều chủ đề thực hiện một số tập tin và DB ops. exit_bool là một tập hợp nguyên tử var bởi các chủ đề khác để cho biết chúng đang ở giữa một số hoạt động. Tôi kiểm tra giá trị và đợi cho đến khi nó biến thành false và sau đó thoát.

Tôi tự hỏi chi phí của loop{} là trái ngược với loop{sleep x}.

Trả lời

7

loop {} dẫn đến việc sử dụng CPU cao (~ 100%), trong khi loop { sleep x } thì không.

Một lựa chọn khác là chỉ cần sleep mãi mãi:

begin 
    sleep 
rescue Interrupt 
    # ... 
end 
Các vấn đề liên quan