我对PHP中的pcntl_fork
感到困惑。
我认为它实现了多线程,但它是如何工作的?并且在脚本中如何使用它呢?
我对PHP中的pcntl_fork
感到困惑。
我认为它实现了多线程,但它是如何工作的?并且在脚本中如何使用它呢?
pcntl_fork()
时,当前进程会被分成两个进程。父进程的整个命名空间都会被复制到子进程中,并且两个进程将并行执行,唯一的区别是:pcntl_fork()
在父进程中返回子进程的PID,在子进程中返回0
。MySQL server has gone away
的错误。这里是一个来自文档的示例from documentation:
<?php
$pid = pcntl_fork();
if ($pid == -1) {
die('could not fork');
} else if ($pid) {
// we are the parent
pcntl_wait($status); //Protect against Zombie children
} else {
// we are the child
}
我已经使用过异步并发框架amphp
很多次,现在我要在这里提到它。如果你确实需要在单个请求中运行异步非阻塞任务,我认为amphp
是目前最好的解决方案。它使用php生成器的概念($value = yield $promise
)来执行人类可读的代码,而不会像reactphp一样陷入promise地狱。