Class: Async::Scheduler
- Inherits:
-
Object
- Object
- Async::Scheduler
- Defined in:
- lib/async/scheduler.rb
Class Method Summary collapse
Instance Method Summary collapse
- #block(blocker, timeout) ⇒ Object
- #clear! ⇒ Object
- #close ⇒ Object
- #fiber(&block) ⇒ Object
-
#initialize(reactor) ⇒ Scheduler
constructor
A new instance of Scheduler.
- #io_wait(io, events, timeout = nil) ⇒ Object
- #kernel_sleep(duration) ⇒ Object
-
#process_wait(pid, flags) ⇒ Object
Wait for the specified process ID to exit.
- #set! ⇒ Object
- #unblock(blocker, fiber) ⇒ Object
Constructor Details
#initialize(reactor) ⇒ Scheduler
Returns a new instance of Scheduler.
35 36 37 38 |
# File 'lib/async/scheduler.rb', line 35 def initialize(reactor) @reactor = reactor @wrappers = nil end |
Class Method Details
.supported? ⇒ Boolean
26 27 28 |
# File 'lib/async/scheduler.rb', line 26 def self.supported? true end |
Instance Method Details
#block(blocker, timeout) ⇒ Object
93 94 95 |
# File 'lib/async/scheduler.rb', line 93 def block(blocker, timeout) @reactor.block(blocker, timeout) end |
#clear! ⇒ Object
45 46 47 48 49 50 51 |
# File 'lib/async/scheduler.rb', line 45 def clear! # Because these instances are created with `autoclose: false`, this does not close the underlying file descriptor: # @ios&.each_value(&:close) @wrappers = nil Fiber.set_scheduler(nil) end |
#close ⇒ Object
101 102 |
# File 'lib/async/scheduler.rb', line 101 def close end |
#fiber(&block) ⇒ Object
104 105 106 107 108 109 110 111 112 |
# File 'lib/async/scheduler.rb', line 104 def fiber(&block) task = Task.new(@reactor, &block) fiber = task.fiber task.run return fiber end |
#io_wait(io, events, timeout = nil) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/async/scheduler.rb', line 57 def io_wait(io, events, timeout = nil) wrapper = from_io(io) if events == ::IO::READABLE if wrapper.wait_readable(timeout) return ::IO::READABLE end elsif events == ::IO::WRITABLE if wrapper.wait_writable(timeout) return ::IO::WRITABLE end else if wrapper.wait_any(timeout) return events end end return false ensure wrapper.reactor = nil end |
#kernel_sleep(duration) ⇒ Object
89 90 91 |
# File 'lib/async/scheduler.rb', line 89 def kernel_sleep(duration) self.block(nil, duration) end |
#process_wait(pid, flags) ⇒ Object
Wait for the specified process ID to exit.
83 84 85 86 87 |
# File 'lib/async/scheduler.rb', line 83 def process_wait(pid, flags) Thread.new do ::Process::Status.wait(pid, flags) end.value end |
#set! ⇒ Object
40 41 42 43 |
# File 'lib/async/scheduler.rb', line 40 def set! @wrappers = {} Fiber.set_scheduler(self) end |
#unblock(blocker, fiber) ⇒ Object
97 98 99 |
# File 'lib/async/scheduler.rb', line 97 def unblock(blocker, fiber) @reactor.unblock(blocker, fiber) end |