Что происходит за PHP pcntl_fork()?

Я потратил часы, дни, недели, пытаясь понять, как на самом деле работает 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 ответ

Решение

Это в основном то, что происходит:

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

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

Любой код после pcntl_fork() исполняется как родительским, так и дочерним процессом; вы можете думать о ребенке как о клоне родителя, за исключением того, что результат pcntl_fork() является 0; как будто код входит в другую реальность, мало чем отличающуюся назад в будущее;-)

Это только один из возможных результатов, хотя; в зависимости от использования процессора "начало" ребенка может происходить вместе с "родительским" выводом родителя.

Другие вопросы по тегам