Bird
Raised Fist0
Rubyprogramming~5 mins

Fiber for cooperative concurrency in Ruby - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a Fiber in Ruby?
A Fiber is a lightweight concurrency tool in Ruby that allows you to pause and resume code execution manually, enabling cooperative multitasking.
Click to reveal answer
intermediate
How does Fiber differ from Thread in Ruby?
Fibers are cooperative, meaning they yield control explicitly, while Threads are preemptive and managed by the Ruby scheduler. Fibers are lighter and do not run in parallel.
Click to reveal answer
beginner
What method is used to start or resume a Fiber?
The Fiber#resume method is used to start or continue execution of a Fiber from where it last yielded.
Click to reveal answer
beginner
What does Fiber.yield do?
Fiber.yield pauses the current Fiber and returns control to the caller, allowing cooperative multitasking.
Click to reveal answer
intermediate
Why is Fiber considered cooperative concurrency?
Because Fibers only switch control when they explicitly yield, unlike threads which can be interrupted at any time by the scheduler.
Click to reveal answer
Which method starts or resumes a Fiber in Ruby?
AFiber#begin
BFiber#start
CFiber#run
DFiber#resume
What happens when Fiber.yield is called?
AThe Fiber blocks other Fibers
BThe Fiber pauses and returns control to the caller
CThe Fiber runs in a new thread
DThe Fiber terminates immediately
Fibers in Ruby are best described as:
ACooperative concurrency units
BPreemptive threads
CParallel processes
DSynchronous functions
Which of the following is NOT true about Fibers?
AThey run in parallel on multiple CPU cores
BThey allow manual control of execution flow
CThey are lighter than threads
DThey use <code>Fiber.yield</code> to pause execution
What is the main advantage of using Fibers?
ASimplifies multi-thread synchronization
BAutomatic parallel execution
CEfficient cooperative multitasking with low overhead
DRuns code asynchronously without yielding
Explain how Fibers enable cooperative concurrency in Ruby.
Think about how Fibers pause themselves and let others run.
You got /4 concepts.
    Describe the difference between Fibers and Threads in Ruby.
    Consider how control is passed in Fibers vs Threads.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using Fiber in Ruby?
      easy
      A. To pause and resume tasks manually for cooperative multitasking
      B. To create multiple threads that run in parallel automatically
      C. To speed up code by running it on multiple CPU cores
      D. To handle database connections asynchronously

      Solution

      1. Step 1: Understand Fiber's role

        Fibers allow manual pausing and resuming of code execution, enabling cooperative multitasking.
      2. Step 2: Differentiate from threads

        Unlike threads, Fibers do not run in parallel automatically; they require explicit control.
      3. Final Answer:

        To pause and resume tasks manually for cooperative multitasking -> Option A
      4. Quick Check:

        Fiber = manual pause/resume [OK]
      Hint: Fibers pause and resume tasks manually, not parallel threads [OK]
      Common Mistakes:
      • Confusing Fibers with threads or parallelism
      • Thinking Fibers run automatically in background
      • Assuming Fibers speed up CPU usage
      2. Which of the following is the correct way to create a Fiber in Ruby?
      easy
      A. fiber = Fiber.start { puts 'Hello' }
      B. fiber = Fiber.new { puts 'Hello' }
      C. fiber = Fiber.create { puts 'Hello' }
      D. fiber = Fiber.run { puts 'Hello' }

      Solution

      1. Step 1: Recall Fiber creation syntax

        Ruby uses Fiber.new with a block to create a new Fiber.
      2. Step 2: Check other options

        Methods like create, start, or run do not exist for Fiber creation.
      3. Final Answer:

        fiber = Fiber.new { puts 'Hello' } -> Option B
      4. Quick Check:

        Fiber creation = Fiber.new [OK]
      Hint: Use Fiber.new with a block to create a Fiber [OK]
      Common Mistakes:
      • Using non-existent Fiber methods like create or start
      • Forgetting to pass a block to Fiber.new
      • Confusing Fiber with Thread syntax
      3. What will be the output of the following Ruby code?
      fiber = Fiber.new do
        puts 'Step 1'
        Fiber.yield
        puts 'Step 2'
      end
      
      fiber.resume
      puts 'Between'
      fiber.resume
      medium
      A. Step 2 Between Step 1
      B. Step 1 Step 2 Between
      C. Between Step 1 Step 2
      D. Step 1 Between Step 2

      Solution

      1. Step 1: Trace first resume call

        Calling fiber.resume runs until Fiber.yield, printing 'Step 1'.
      2. Step 2: Trace code after first resume

        After yield, control returns to main, printing 'Between'.
      3. Step 3: Trace second resume call

        Second fiber.resume resumes after yield, printing 'Step 2'.
      4. Final Answer:

        Step 1 Between Step 2 -> Option D
      5. Quick Check:

        Fiber.yield pauses, resume continues [OK]
      Hint: Fiber.yield pauses; resume continues after yield [OK]
      Common Mistakes:
      • Assuming all code runs at first resume
      • Confusing order of prints around yield
      • Thinking yield stops Fiber permanently
      4. Identify the error in this Fiber usage:
      fiber = Fiber.new do
        puts 'Start'
        Fiber.yield
        puts 'End'
      end
      
      fiber.yield
      fiber.resume
      medium
      A. Calling Fiber.yield outside a Fiber block causes an error
      B. Fiber.resume must be called before Fiber.yield
      C. Fiber.new requires a parameter for yield count
      D. Fiber cannot print inside its block

      Solution

      1. Step 1: Check where Fiber.yield is called

        The code calls fiber.yield outside the Fiber block, which is invalid.
      2. Step 2: Understand Fiber.yield usage

        Fiber.yield is a class method to pause current Fiber, not an instance method on Fiber objects.
      3. Final Answer:

        Calling Fiber.yield outside a Fiber block causes an error -> Option A
      4. Quick Check:

        Fiber.yield only inside Fiber block [OK]
      Hint: Fiber.yield is called inside Fiber block only [OK]
      Common Mistakes:
      • Calling fiber.yield instead of Fiber.yield
      • Expecting Fiber.resume before yield call
      • Thinking Fiber.new needs parameters for yield
      5. Given two Fibers that alternate printing numbers, what is the output of this code?
      fiber1 = Fiber.new do
        3.times do |i|
          puts "Fiber1: #{i}"
          Fiber.yield
        end
      end
      
      fiber2 = Fiber.new do
        3.times do |i|
          puts "Fiber2: #{i}"
          Fiber.yield
        end
      end
      
      while fiber1.alive? || fiber2.alive?
        fiber1.resume if fiber1.alive?
        fiber2.resume if fiber2.alive?
      end
      hard
      A. Fiber2: 0 Fiber1: 0 Fiber2: 1 Fiber1: 1 Fiber2: 2 Fiber1: 2
      B. Fiber1: 0 Fiber1: 1 Fiber1: 2 Fiber2: 0 Fiber2: 1 Fiber2: 2
      C. Fiber1: 0 Fiber2: 0 Fiber1: 1 Fiber2: 1 Fiber1: 2 Fiber2: 2
      D. Fiber1: 0 Fiber2: 0 Fiber2: 1 Fiber1: 1 Fiber1: 2 Fiber2: 2

      Solution

      1. Step 1: Understand Fiber alternation

        Each Fiber prints a number then yields, pausing itself.
      2. Step 2: Trace the while loop

        The loop resumes fiber1 then fiber2 alternately while they are alive.
      3. Step 3: Follow output order

        Output alternates: Fiber1:0, Fiber2:0, Fiber1:1, Fiber2:1, Fiber1:2, Fiber2:2.
      4. Final Answer:

        Fiber1: 0 Fiber2: 0 Fiber1: 1 Fiber2: 1 Fiber1: 2 Fiber2: 2 -> Option C
      5. Quick Check:

        Fibers alternate resume and yield [OK]
      Hint: Fibers alternate resume and yield to interleave output [OK]
      Common Mistakes:
      • Assuming one Fiber runs completely before the other
      • Mixing order of Fiber resumes
      • Forgetting Fiber.yield pauses execution
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard