ホームページ >バックエンド開発 >PHPチュートリアル >PHPマルチプロセスプログラミング例の詳細説明

PHPマルチプロセスプログラミング例の詳細説明

小云云
小云云オリジナル
2018-02-06 10:38:022000ブラウズ

この記事では主に PHP マルチプロセス プログラミングの方法を紹介し、PHP マルチプロセス プログラミングの概念、使用法、関連機能、使用スキルを詳しく説明します。必要な方は参考にしていただければ幸いです。みんなを助けて。

詳細は次のとおりです:

ステップ 1:

$ php -m コマンドで php に pcntl および posix 拡張機能がインストールされているかどうかを確認し、インストールされていない場合はインストールします

使用シナリオ:

1.大量のネットワーク消費が必要 時間のかかる操作
2. 大量の計算を実行する必要があり、システムには複数の CPU があり、ユーザーに高速なエクスペリエンスを提供するために、タスクはいくつかの小さなタスクに分割され、最終的にマージされます。 。

複数のプロセスの共通関数:

pcntl_alarm — プロセスのアラームクロック信号を設定します
pcntl_errno — エイリアスpcntl_strerror
pcntl_exec — 現在のプロセス空間で指定されたプログラムを実行します
pcntl_ fork — 子プロセスを作成し、現在のプロセスの現在の場所にブランチ (子プロセス) を生成します。注釈: fork は子プロセスを作成します。親プロセスと子プロセスはどちらもフォーク位置から実行を継続します。違いは、親プロセスの実行中、fork の戻り値は子プロセスの番号であるのに対し、子プロセスの戻り値は子プロセスの番号であることです。プロセスは0を取得します。
pcntl_get_last_error — 失敗した最後の pcntl 関数によって設定されたエラー番号を取得します
pcntl_getpriority — 任意のプロセスの優先順位を取得します
pcntl_setpriority — 任意のプロセスの優先順位を変更します
pcntl_signal_dispatch — 呼び出し待機シグナルプロセッサー
pcntl_signal — シグナルハンドラーをインストールする
pcntl_sigprocmask — ブロッキングシグナルを設定または取得する
pcntl_sigtimedwait — タイムアウト付きでシグナルを待機する
pcntl_sigwaitinfo — シグナルを待機する
pcntl_strerror —指定された errno に関連付けられたシステム エラー メッセージを取得します
pcntl_wait — フォークの子プロセスのステータスを待つか返す
pcntl_waitpid — フォークの子プロセスのステータスを待つか返す
pcntl_wexitstatus — 中断された子プロセスのリターンコードを返す
pcntl_wifexited — チェックステータス コードが正常な終了を表すかどうか。
pcntl_wifsignaled - 子のプロセスステータスコードが信号による中断を表すかどうかをチェックします
pcntl_wifstoppedpded-子のプロセスが現在停止されているかどうかをチェックします。 — 子プロセスの原因を返します プロセス中断のシグナル
例 1:

<?php
//最早的进程,也是父进程
$parentPid = getmypid();
echo &#39;原始父进程:&#39; . $parentPid . PHP_EOL;
//创建子进程,返回子进程id
$pid = pcntl_fork();
if( $pid == -1 ){
  exit("fork error");
}
//pcntl_fork 后,父进程返回子进程id,子进程返回0
echo &#39;ID : &#39; . $pid . PHP_EOL;
if( $pid == 0 ){
  //子进程执行pcntl_fork的时候,pid总是0,并且不会再fork出新的进程
  $mypid = getmypid(); // 用getmypid()函数获取当前进程的PID
  echo &#39;I am child process. My PID is &#39; . $mypid . &#39; and my fathers PID is &#39; . $parentPid . PHP_EOL;
} else {
  //父进程fork之后,返回的就是子进程的pid号,pid不为0
  echo &#39;Oh my god! I am a father now! My childs PID is &#39; . $pid . &#39; and mine is &#39; . $parentPid . PHP_EOL;
}
$aa = shell_exec("ps -af | grep index.php");
echo $aa;

例 2: フォークフラッディングを避けるために複数の子プロセスを開く


<?php
//最早的进程,也是父进程
$parentPid = getmypid();
echo &#39;原始父进程:&#39; . $parentPid . PHP_EOL;
//开启十个子进程
for($i = 0; $i < 10; $i++) {
  $pid = pcntl_fork();
  if($pid == -1) {
    echo "Could not fork!\n";
    exit(1);
  }
  //子进程
  if(!$pid) {
    //child process workspace
    echo &#39;子进程:&#39; . getmypid() . PHP_EOL;
    exit(); //子进程逻辑执行完后,马上退出,以免往下走再fork子进程,不好控制  
  } else {
    echo &#39;父进程:&#39; . getmypid() . PHP_EOL;
  }
}
echo getmypid() . PHP_EOL;
$aa = shell_exec("ps -af | grep index.php");
echo $aa;

関連推奨事項:

PHPケースでのマルチプロセスプログラミングに関するコード


PHPサーバーサイドマルチプロセスプログラミング実践_PHPチュートリアル

PHPマルチプロセスプログラミング例解説

以上がPHPマルチプロセスプログラミング例の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。