函式名: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,從而實現協程的效果。