1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| | # -*- encoding: binary -*-
# :enddoc:
begin
require 'fiber'
rescue LoadError
defined?(NeverBlock) or raise
end
# core namespace for all things that use Fibers in \Rainbows!
#
# It's generally not recommended to use any of this in your applications
# unless you're willing to accept breakage. Most of this is very
# difficult-to-use, fragile and we don't have much time to devote to
# supporting these in the future.
module Rainbows::Fiber
# 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] = Rainbows.now + seconds
Fiber.yield
end
autoload :Base, 'rainbows/fiber/base'
autoload :Queue, 'rainbows/fiber/queue'
autoload :IO, 'rainbows/fiber/io'
end
|