在 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 更适合构建高性能的异步应用。