在 PHP 中,可以使用 Fiber 和異步編程來實現非阻塞性的任務處理
首先,確保已經安裝了 PHP 的 Fiber 擴展。你可以通過運行 composer require amphp/fiber
來安裝。
<?php
require 'vendor/autoload.php';
use Amp\Loop;
use Amp\Promise;
function asyncFunction(): Promise {
return new Promise(function ($resolve, $reject) {
Loop::defer(function () use ($resolve) {
// 模擬耗時操作
sleep(1);
$resolve("異步任務完成");
});
});
}
<?php
require 'vendor/autoload.php';
use Amp\Loop;
use Amp\Fiber;
// 創建一個 Fiber
$fiber = new Fiber(function () {
// 調用異步函數
$result = yield asyncFunction();
echo $result . PHP_EOL;
});
// 運行 Fiber
Loop::run(function () use ($fiber) {
$fiber->start();
});
在這個例子中,我們創建了一個名為 asyncFunction
的異步函數,該函數使用 Amp\Promise 對象表示異步操作。然后,我們創建了一個 Fiber,并在其中調用了異步函數。最后,我們使用 Amp\Loop 運行 Fiber。
當你運行這段代碼時,你會看到 “異步任務完成” 被輸出到控制臺。這說明我們已經成功地結合了 Fiber 和異步編程。