diff options
author | Eric Wong <normalperson@yhbt.net> | 2010-10-21 16:25:39 -0700 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2010-10-22 18:37:45 +0000 |
commit | 15631717fce044fbad2f386a7b1c7daf4bdd83d2 (patch) | |
tree | f32c80aafb8b5fe13fefe9a1e3765dd757ccde7d /lib/rainbows/fiber.rb | |
parent | d4a2b5dd2b85f4b2d3bb120ee1e1b0dde31bc25c (diff) | |
download | rainbows-15631717fce044fbad2f386a7b1c7daf4bdd83d2.tar.gz |
Despite the large number of changes, most of it is code movement here.
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 |