查詢

Fiber::suspend()函式—用法及示例

「 將當前的 Fiber 暫停,並切換到另一個 Fiber 」


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

補充糾錯
上一個函式: Fiber::throw()函式
下一個函式: Fiber::start()函式
熱門PHP函式
分享連結