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

2888 ワード

この例では、PHPマルチプロセスプログラミングについて説明します.皆さんの参考にしてください.具体的には以下の通りです.
ステップ1:
$php-mコマンドphpがpcntlとposix拡張子をインストールしているかどうかを確認し、そうでない場合はインストールします.
シーンを使用:
1.大量のネットワークによる時間のかかる操作を行う.大量の演算を行い、システムには複数のcpuがあり、ユーザーがより速く体験できるように、1つのタスクをいくつかの小さなタスクに分けて、最後に統合します.
マルチプロセス共通関数:
pcntl_alarm――プロセスにalarmアラーム信号pcntlを設定するerrno―別名pcntl_strerror pcntl_exec―現在のプロセス空間で指定プログラムpcntl_を実行するfork-サブプロセスを作成し、現在のプロセスの現在位置にブランチを生成(サブプロセス).注:forkはサブプロセスを作成し、親プロセスとサブプロセスはforkの位置から下へ実行を継続します.異なるのは、親プロセスの実行中に得られたforkの戻り値がサブプロセス番号であり、サブプロセスは0です.pcntl_get_last_error-Retrieve the error number set by the last pcntl function which failed pcntl_getpriority―任意のプロセスの優先度pcntl_を取得するsetpriority–任意のプロセスの優先度pcntl_を変更signal_dispatch―待機信号を呼び出すプロセッサpcntl_Signal―信号プロセッサpcntlをインストールするSigprocmask―ブロック信号pcntlを設定または検索するSigtimedwait―タイムアウト機構付き信号待ちpcntl_Sigwaitinfo―待機信号pcntl_strerror ― Retrieve the system error message associated with the given errno pcntl_wait―forkのサブプロセス状態pcntl_を待つか戻るwaitpid――forkのサブプロセス状態pcntlを待つか戻るWexitstatus―中断したサブプロセスの戻りコードpcntl_を返すwifiexited-ステータスコードが正常な終了を表しているかどうかを確認します.pcntl_wifisignaled-サブプロセスステータスコードが、ある信号によってpcntlが中断されたことを表すかどうかを確認します.wifistopped-サブプロセスが現在pcntlを停止しているかどうかを確認します.wstopsig―サブプロセスの停止を招く信号pcntl_を返すwtermsig―サブプロセスの中断を招く信号を返す
例1:

 
 

例2:複数のサブプロセスを開き、forkの氾濫を避ける

";
    exit(1);
  }
  //   
  if(!$pid) {
    //child process workspace
    echo '   :' . getmypid() . PHP_EOL;
    exit(); //         ,    ,      fork   ,      
  } else {
    echo '   :' . getmypid() . PHP_EOL;
  }
}
echo getmypid() . PHP_EOL;
$aa = shell_exec("ps -af | grep index.php");
echo $aa;

 
 

注意:
pcntl経由XXXシリーズ関数はマルチプロセス機能を使用します.注意:pcntl_XXXはphp CLI(コマンドライン)環境でしか実行できません.webサーバ環境では、予期せぬ結果が出ますので、ご遠慮ください.
PHPについてもっと兴味のある読者は、「PHPプロセスとスレッド操作テクニック総括」、「PHPネットワークプログラミングテクニック総括」、「PHP基本文法入門教程」、「PHP配列(Array)操作テクニック大全」、「php文字列(string)用法総括」、「php+mysqlデータベース操作入門チュートリアル」および「php一般データベース操作テクニック要約」
ここで述べたことが皆さんのPHPプログラム設計に役立つことを願っています.