在 PHP 中,實現非阻塞等待機制通常需要使用多線程或異步編程。這里有兩種方法可以實現:
$pid = pcntl_fork();
if ($pid == -1) {
die("Could not fork");
} else if ($pid) { // Parent process
echo "Parent process\n";
pcntl_wait($status); // 等待子進程結束
} else { // Child process
echo "Child process\n";
sleep(5); // 模擬耗時操作
exit(0);
}
echo "End of script\n";
首先,安裝 ReactPHP:
composer require react/event-loop
然后,創建一個非阻塞等待機制的示例:
require 'vendor/autoload.php';
$loop = React\EventLoop\Factory::create();
$loop->addTimer(3, function () {
echo "After 3 seconds\n";
});
$loop->futureTick(function () {
echo "Immediately after the event loop starts\n";
});
$loop->run();
這兩種方法都可以實現非阻塞等待機制,但它們適用于不同的場景。pcntl_fork()
更適合處理密集型任務,而 ReactPHP 更適合構建高性能的異步應用。