1
我實現一些代碼,它運行在一個循環:紅寶石無限循環導致100%的CPU負載
loop do
..
end
在這循環中,我處理與詛咒庫按鍵。如果我按N和輸入了什麼東西,我開始一個新的線程,該線程(再次loop do .. end
)計算時間
的問題是,爲什麼loop
或while true
導致在CPU內核中的一個100%的CPU負載?問題在循環中有效嗎?
有沒有辦法做到與紅寶石較低的CPU消耗無限循環?
提供完整的源here
UPD - strace的
$ strace -c -p 5480
Process 5480 attached - interrupt to quit
^CProcess 5480 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
51.52 0.002188 0 142842 ioctl
24.21 0.001028 0 71421 select
14.22 0.000604 0 47614 gettimeofday
10.05 0.000427 0 47614 rt_sigaction
0.00 0.000000 0 25 write
0.00 0.000000 0 16 futex
------ ----------- ----------- --------- --------- ----------------
100.00 0.004247 309532 total
爲什麼不使用100%的CPU?沒有理由不去嘗試 - 如果這實際上在做一些非常重要的工作*會怎麼樣?爲了避免吃掉CPU,[「睡眠」](http://apidock.com/ruby/Kernel/sleep)線程。一個簡單的「睡眠(0)」就足夠了。 – user2246674
線程 – baldrs
已經有'睡眠1'作爲循環邏輯的一部分有可能是一個繁忙的循環某處(例如在其中一個產生的線程),這是不是很好.. – user2246674