PHP pcntl_fork()背后会发生什么?

时间:2014-07-10 04:57:48

标签: php pcntl

我花了几个小时,几天,几个星期试图了解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";

上面的脚本背后发生了什么为什么我会得到这个结果?

  

开始

     

父母

     

结束

     

启动

     

     

有人可以解释一下什么是电脑"思考"吗

1 个答案:

答案 0 :(得分:3)

这基本上就是这样:

                    pcntl_fork()
                       ||
      +----------------++------------------+
    parent                               child

    "start"                              ...
    "parent"                             ...
    "end"                                ...
                                         "start"
                                         "child"
                                         "end"

pcntl_fork()之后的所有代码都由父子进程执行;您可以将孩子视为父母的克隆,但pcntl_fork()的结果是0;这就像代码进入了一个不同的现实,与回到未来不同; - )

这只是可能的结果之一;根据cpu的使用情况,孩子的“开始”可能与父母的“父母”输出一起出现。