0

我花了数小时、数天、数周试图了解 PHP pcntl 的真正工作原理,但仍然不知道到底发生了什么。

为什么是父母和孩子?我正在使用 Debian(我必​​须承认我是计算机专家),但我想做的只是从我的 webSocket 客户端(我已经设法做到)接收消息并继续倾听其他用户。

换句话说,如果我收到一条消息并使用 a ,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";

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

开始

父母

结尾

开始

孩子

结尾

有人可以解释一下计算机“在想什么”吗?

4

1 回答 1

3

这基本上是发生了什么:

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

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

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

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

于 2014-07-10T05:11:13.963 回答