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