Concurrency Basics
Fiber Resume
A fiber pauses and resumes work at explicit yield points.
Fiber Resume
fiber_resume.rb
start =
sequence = Fiber.new do
first = start
Fiber.yield(first)
second = first + 1
Fiber.yield(second)
second + 1
end
first_value = sequence.resume
second_value = sequence.resume
final_value = sequence.resume
puts "start=#{start}"
puts "first=#{first_value}"
puts "second=#{second_value}"
puts "final=#{final_value}"
start =
sequence = Fiber.new do
first = start
Fiber.yield(first)
second = first + 1
Fiber.yield(second)
second + 1
end
first_value = sequence.resume
second_value = sequence.resume
final_value = sequence.resume
puts "start=#{start}"
puts "first=#{first_value}"
puts "second=#{second_value}"
puts "final=#{final_value}"
start =
sequence = Fiber.new do
first = start
Fiber.yield(first)
second = first + 1
Fiber.yield(second)
second + 1
end
first_value = sequence.resume
second_value = sequence.resume
final_value = sequence.resume
puts "start=#{start}"
puts "first=#{first_value}"
puts "second=#{second_value}"
puts "final=#{final_value}"
fiber
Fibers are cooperative: code switches between the caller and the fiber only when `yield` and `resume` are used.