diff options
Diffstat (limited to 'lib/rainbows/fiber.rb')
-rw-r--r-- | lib/rainbows/fiber.rb | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/lib/rainbows/fiber.rb b/lib/rainbows/fiber.rb index e65ef1b..94f7d94 100644 --- a/lib/rainbows/fiber.rb +++ b/lib/rainbows/fiber.rb @@ -6,11 +6,28 @@ rescue LoadError defined?(NeverBlock) or raise end -module Rainbows +# core module for all things that use Fibers in Rainbows! +module Rainbows::Fiber - # core module for all things that use Fibers in Rainbows! - module Fiber - autoload :Base, 'rainbows/fiber/base' - autoload :Queue, 'rainbows/fiber/queue' + # blocked readers (key: fileno, value: Rainbows::Fiber::IO object) + RD = [] + + # blocked writers (key: fileno, value: Rainbows::Fiber::IO object) + WR = [] + + # sleeping fibers go here (key: Fiber object, value: wakeup time) + ZZ = {} + + # puts the current Fiber into uninterruptible sleep for at least + # +seconds+. Unlike Kernel#sleep, this it is not possible to sleep + # indefinitely to be woken up (nobody wants that in a web server, + # right?). Calling this directly is deprecated, use + # Rainbows.sleep(seconds) instead. + def self.sleep(seconds) + ZZ[::Fiber.current] = Time.now + seconds + ::Fiber.yield end + + autoload :Base, 'rainbows/fiber/base' + autoload :Queue, 'rainbows/fiber/queue' end |