函数名:Fiber::suspend()
适用版本:PHP 8.1.0 及以上版本
用法:Fiber::suspend() 函数用于将当前的 Fiber 暂停,并切换到另一个 Fiber。它可以在 Fiber 的执行过程中多次调用,以便让其他 Fiber 有机会执行。
示例:
<?php
$fiber1 = new Fiber(function () {
echo "Fiber 1: Started\n";
Fiber::suspend(); // 暂停 Fiber 1 的执行
echo "Fiber 1: Resumed\n";
Fiber::suspend(); // 再次暂停 Fiber 1 的执行
echo "Fiber 1: Resumed again\n";
});
$fiber2 = new Fiber(function () {
echo "Fiber 2: Started\n";
Fiber::suspend(); // 暂停 Fiber 2 的执行
echo "Fiber 2: Resumed\n";
});
$fiber1->start(); // 启动 Fiber 1
$fiber2->start(); // 启动 Fiber 2
echo "Main: Resuming Fiber 1\n";
$fiber1->resume(); // 恢复 Fiber 1 的执行
echo "Main: Resuming Fiber 2\n";
$fiber2->resume(); // 恢复 Fiber 2 的执行
echo "Main: Resuming Fiber 1 again\n";
$fiber1->resume(); // 再次恢复 Fiber 1 的执行
echo "Main: Finished\n";
?>
输出结果:
Fiber 1: Started
Fiber 2: Started
Main: Resuming Fiber 1
Fiber 1: Resumed
Main: Resuming Fiber 2
Fiber 2: Resumed
Main: Resuming Fiber 1 again
Fiber 1: Resumed again
Main: Finished
在上面的示例中,我们创建了两个 Fiber(Fiber 1 和 Fiber 2)。首先启动 Fiber 1,然后启动 Fiber 2。接着在主线程中先恢复 Fiber 1 的执行,再恢复 Fiber 2 的执行,最后再次恢复 Fiber 1 的执行。通过使用 Fiber::suspend() 函数,我们可以在 Fiber 的执行过程中暂停并切换到其他 Fiber,从而实现协程的效果。