我花了几个小时,几天,几个星期试图了解PHP pcntl的确如何工作,但仍然不知道到底发生了什么。
为什么是父母和孩子?我正在使用Debian(我必须承认,他是计算机方面的专家)但我想要做的就是从我的webSocket客户端收到一条消息(我有已经成功了)并继续倾听其他用户的意见。
换句话说,如果我收到一条消息并使用sleep(5);
,那么在这段代码完成之前,服务器将不会收听任何其他消息。
请注意sleep(5)
用于测试目的。我计划同时处理数百条消息,这就是为什么我要弄清楚pcntl
如何能够提供帮助。
$pid = pcntl_fork();
echo "start\n";
if($pid) {
// parent process runs what is here
echo "parent\n";
}
else {
// child process runs what is here
echo "child\n";
}
echo "end\n";
上面的脚本背后发生了什么?为什么我会得到这个结果?
开始
父母
结束
启动
子
端
有人可以解释一下什么是电脑"思考"吗
答案 0 :(得分:3)
这基本上就是这样:
pcntl_fork()
||
+----------------++------------------+
parent child
"start" ...
"parent" ...
"end" ...
"start"
"child"
"end"
pcntl_fork()
之后的所有代码都由父和子进程执行;您可以将孩子视为父母的克隆,但pcntl_fork()
的结果是0
;这就像代码进入了一个不同的现实,与回到未来不同; - )
这只是可能的结果之一;根据cpu的使用情况,孩子的“开始”可能与父母的“父母”输出一起出现。