2015-12-04 10 views
6

Używam pętli do czekania na przerwanie klawiatury, a następnie zezwalam na operację czyszczenia przed wyjściem w środowisku wielowątkowym.`loop {}` versus `loop {sleep 1}`

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

Ten fragment kodu działa w głównym wątku. Istnieje wiele wątków wykonujących kilka operacji plikowych i baz danych. exit_bool jest zbiorem atomowym ustawionym przez inne wątki, aby wskazać, że znajduje się w środku jakiejś operacji. Sprawdzam wartość i czekam, aż zmieni się na false, a następnie zakończ.

Zastanawiam się, jaki jest koszt loop{} w przeciwieństwie do loop{sleep x}.

Odpowiedz

7

loop {} powoduje wysokie wykorzystanie procesora (~ 100%), podczas gdy loop { sleep x } nie.

Inną opcją jest po prostu sleep zawsze:

begin 
    sleep 
rescue Interrupt 
    # ... 
end