0
0
PHPprogramming~20 mins

Fibers for concurrency in PHP - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Fiber Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of a simple Fiber switch
What is the output of this PHP code using Fibers?
PHP
<?php
$fiber = new Fiber(function(): void {
    echo "Inside fiber.\n";
    Fiber::suspend();
    echo "Resumed fiber.\n";
});

echo "Before fiber start.\n";
$fiber->start();
echo "Between fiber suspend and resume.\n";
$fiber->resume();
echo "After fiber resume.\n";
A
Inside fiber.
Before fiber start.
Between fiber suspend and resume.
Resumed fiber.
After fiber resume.
B
Before fiber start.
Inside fiber.
Resumed fiber.
Between fiber suspend and resume.
After fiber resume.
C
Before fiber start.
Between fiber suspend and resume.
Inside fiber.
Resumed fiber.
After fiber resume.
D
Before fiber start.
Inside fiber.
Between fiber suspend and resume.
Resumed fiber.
After fiber resume.
Attempts:
2 left
💡 Hint
Remember that Fiber::suspend pauses execution inside the fiber and returns control to the caller.
🧠 Conceptual
intermediate
1:30remaining
Fiber state after suspension
After a Fiber suspends using Fiber::suspend(), what is the state of the Fiber object?
AThe Fiber is terminated and cannot be resumed.
BThe Fiber is in 'suspended' state and can be resumed later.
CThe Fiber is in 'started' state but cannot be resumed again.
DThe Fiber is in 'new' state waiting to start.
Attempts:
2 left
💡 Hint
Think about what Fiber::suspend() does to the fiber's execution.
🔧 Debug
advanced
2:00remaining
Identify the error in Fiber usage
What error will this PHP code produce when run?
PHP
<?php
$fiber = new Fiber(function(): void {
    echo "Running fiber.\n";
});

$fiber->start();
$fiber->resume();
ASyntaxError: Unexpected token 'resume'
BFatal error: Call to undefined method Fiber::resume()
CFiberError: Cannot resume a terminated fiber
DNo error, prints 'Running fiber.' twice
Attempts:
2 left
💡 Hint
Consider what happens when you resume a fiber that already finished.
🚀 Application
advanced
2:30remaining
Using Fibers to simulate cooperative multitasking
Given two fibers that print numbers with suspend calls, what is the output of this code?
PHP
<?php
$fiber1 = new Fiber(function() {
    for ($i = 1; $i <= 3; $i++) {
        echo "Fiber1: $i\n";
        Fiber::suspend();
    }
});

$fiber2 = new Fiber(function() {
    for ($i = 1; $i <= 3; $i++) {
        echo "Fiber2: $i\n";
        Fiber::suspend();
    }
});

$fiber1->start();
$fiber2->start();
$fiber1->resume();
$fiber2->resume();
$fiber1->resume();
$fiber2->resume();
A
Fiber1: 1
Fiber2: 1
Fiber1: 2
Fiber2: 2
Fiber1: 3
Fiber2: 3
B
Fiber2: 1
Fiber1: 1
Fiber2: 2
Fiber1: 2
Fiber2: 3
Fiber1: 3
C
Fiber1: 1
Fiber1: 2
Fiber1: 3
Fiber2: 1
Fiber2: 2
Fiber2: 3
D
Fiber1: 1
Fiber2: 1
Fiber2: 2
Fiber1: 2
Fiber1: 3
Fiber2: 3
Attempts:
2 left
💡 Hint
Fibers suspend after each print, so control switches between them.
Predict Output
expert
3:00remaining
Fiber with return value and exception handling
What is the output of this PHP code using Fibers with return and exception?
PHP
<?php
$fiber = new Fiber(function(): int {
    echo "Start fiber\n";
    Fiber::suspend();
    echo "After suspend\n";
    throw new Exception("Error inside fiber");
    return 42;
});

try {
    $fiber->start();
    echo "Resuming fiber\n";
    $fiber->resume();
} catch (Exception $e) {
    echo "Caught exception: " . $e->getMessage() . "\n";
}

echo "Fiber is terminated: " . ($fiber->isTerminated() ? 'yes' : 'no') . "\n";
A
Start fiber
Resuming fiber
After suspend
Caught exception: Error inside fiber
Fiber is terminated: yes
B
Start fiber
After suspend
Resuming fiber
Caught exception: Error inside fiber
Fiber is terminated: yes
C
Start fiber
Resuming fiber
Caught exception: Error inside fiber
Fiber is terminated: no
D
Start fiber
Resuming fiber
After suspend
Fiber is terminated: yes
Attempts:
2 left
💡 Hint
Exception inside fiber is caught outside; fiber terminates after exception.