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.