Slide 32
Slide 32 text
When an I/O operation would otherwise block, Ruby invokes the io_wait hook.
The Fiber Scheduler
class Async::Scheduler
def io_wait(io, events, timeout)
# Register interest in this I/O:
fiber = Fiber.current
monitor = @selector.io_wait(fiber, io, events)
# Yield control to the event loop:
transfer
# When we resume, the I/O is ready:
return events
end
def run
while @selector.ready?
@selector.select(interval) do |fiber|
fiber.transfer
end
end
end
end
I/O
待ちが発生すると io_wait
フックが呼ばれ、ファイバーをセレクターに登録する。
Slide 32 of 170 0311-scheduler-code.md Elapsed: 04:42 Slide: 00:05
🎤 Samuel