Rainbows! 3.1.0 - minor updates
[rainbows.git] / lib / rainbows / fiber.rb
blob3dc97c36cfc3f6568bc2d64d09ca7a385492693e
1 # -*- encoding: binary -*-
2 # :stopdoc:
3 begin
4   require 'fiber'
5 rescue LoadError
6   defined?(NeverBlock) or raise
7 end
8 # :startdoc:
10 # core namespace for all things that use Fibers in \Rainbows!
11 module Rainbows::Fiber
13   # :stopdoc:
14   # blocked readers (key: fileno, value: Rainbows::Fiber::IO object)
15   RD = []
17   # blocked writers (key: fileno, value: Rainbows::Fiber::IO object)
18   WR = []
20   # sleeping fibers go here (key: Fiber object, value: wakeup time)
21   ZZ = {}
22   # :startdoc:
24   # puts the current Fiber into uninterruptible sleep for at least
25   # +seconds+.  Unlike Kernel#sleep, this it is not possible to sleep
26   # indefinitely to be woken up (nobody wants that in a web server,
27   # right?).  Calling this directly is deprecated, use
28   # Rainbows.sleep(seconds) instead.
29   def self.sleep(seconds)
30     ZZ[Fiber.current] = Time.now + seconds
31     Fiber.yield
32   end
34   autoload :Base, 'rainbows/fiber/base'
35   autoload :Queue, 'rainbows/fiber/queue'
36   autoload :IO, 'rainbows/fiber/io'
37 end