coolio_fiber_spawn: decrease CPU usage for keepalive
[rainbows.git] / lib / rainbows / fiber / rev / heartbeat.rb
blobf9ef573fbc6b4348878d6fe95f02b29d22260cfd
1 # -*- encoding: binary -*-
2 # :enddoc:
3 class Rainbows::Fiber::Rev::Heartbeat < Rev::TimerWatcher
4   G = Rainbows::G
6   # ZZ gets populated by read_expire in rainbows/fiber/io/methods
7   ZZ = Rainbows::Fiber::ZZ
8   def on_timer
9     exit if (! G.tick && G.cur <= 0)
10     now = Time.now
11     fibs = []
12     ZZ.delete_if { |fib, time| now >= time ? fibs << fib : ! fib.alive? }
13     fibs.each { |fib| fib.resume if fib.alive? }
14   end
15 end