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

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

Feb 06, 2018 am 10:38 AM
php 詳しい説明

この記事では主に 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 '原始父进程:' . $parentPid . PHP_EOL;
//创建子进程,返回子进程id
$pid = pcntl_fork();
if( $pid == -1 ){
  exit("fork error");
}
//pcntl_fork 后,父进程返回子进程id,子进程返回0
echo 'ID : ' . $pid . PHP_EOL;
if( $pid == 0 ){
  //子进程执行pcntl_fork的时候,pid总是0,并且不会再fork出新的进程
  $mypid = getmypid(); // 用getmypid()函数获取当前进程的PID
  echo 'I am child process. My PID is ' . $mypid . ' and my fathers PID is ' . $parentPid . PHP_EOL;
} else {
  //父进程fork之后,返回的就是子进程的pid号,pid不为0
  echo 'Oh my god! I am a father now! My childs PID is ' . $pid . ' and mine is ' . $parentPid . PHP_EOL;
}
$aa = shell_exec("ps -af | grep index.php");
echo $aa;
ログイン後にコピー

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


<?php
//最早的进程,也是父进程
$parentPid = getmypid();
echo '原始父进程:' . $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 '子进程:' . getmypid() . PHP_EOL;
    exit(); //子进程逻辑执行完后,马上退出,以免往下走再fork子进程,不好控制  
  } else {
    echo '父进程:' . 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 までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法

See all articles