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;であることを除いて、子は親のクローンと考えることができます。バック・トゥ・ザ・フューチャーと違って、コードが別の現実に入るようなものです ;-)

ただし、これは考えられる結果の 1 つにすぎません。CPU の使用状況によっては、子の「開始」が親の「親」出力と一緒に発生する場合があります。

于 2014-07-10T05:11:13.963 に答える