`loop {}`与`loop {sleep 1}`

a86*_*a86 6 ruby performance multithreading loops

我正在使用循环来等待键盘中断,然后在退出多线程环境之前允许一些清理操作.

begin
  loop {}
rescue Interrupt
  p "Ctr-C Pressed..Cleaning Up & Shutting Down"
  loop do
    break if exit_bool.false?
  end
  exit 130
end
Run Code Online (Sandbox Code Playgroud)

这段代码在主线程中运行.有多个线程执行多个文件和DB操作.exit_bool是由其他线程设置的原子var,表示它们处于某个操作的中间.我检查值并等到它转动false然后退出.

我想知道loop{}相反的成本是多少loop{sleep x}.

Ste*_*fan 7

loop {}导致高CPU利用率(~100%),而loop { sleep x }不是.

另一种选择是sleep永远:

begin
  sleep
rescue Interrupt
  # ...
end
Run Code Online (Sandbox Code Playgroud)