検索
ホームページバックエンド開発PHPチュートリアルPHPマルチプロセスにおけるpcntl_forkの詳細な紹介

この記事は、PHP マルチプロセス編集の pcntl_fork 例の詳細な説明に関する関連情報を主に紹介します。この記事が、この部分の内容を理解して習得するのに役立つことを願っています。

PHP マルチプロセス。プロセス編集 pcntl_fork の例の詳細な説明

実は、PHP は同時実行をサポートしていますが、使用されることはほとんどありません。最も一般的に使用される方法は、PHP-FMP を使用して php プロセスをスケジュールすることです。

ただし、PHP の使用は Web 開発に限定されず、システム ツールのプログラミング、監視、運用保守にも使用できます。これらの指示を使用すると、同時実行 (マルチプロセス)、ソケット プログラミングなどの PHP の機能をさらに使用できるようになります。

それでは、私が出会った PHP マルチプロセス プログラミングについて話しましょう。このマルチプロセスの使用には背景があります。その背景については以下に漠然と説明します。

もちろん PHP 言語を使用した監視システムが必要です。監視システムは、各監視インジケーターが独自の処理に集中できるようにするために、インジケーターを監視するために別のプロセスを使用する必要があります。設定を取得した後、設定に従って各プロセスを起動する処理もあります。

つまり、これには私がマルチプロセスと呼ぶものが必要です。

  1. まず、構成情報を読み取るために使用されるメインプロセスを開始します。たとえば、5 つのインジケーターを監視する必要があると読みました

  2. その後、メインプロセスは、これら 5 つのインジケーターをそれぞれ監視するために 5 つのサブプロセスを開始します。

  3. 5つの指標監視プロセスを作成した後、メインプロセスは監視設定を実行します。

  4. 構成を変更したら、前のプロセスを強制終了し、プロセスを再作成します。

比較的明確なロジック。次に、操作を単純化してみましょう。簡単に言うと、メイン プロセスは 5 つのサブプロセスを作成します。

まず、プロセスを作成するには、PHP の関数である pcntl_fork() を使用する必要があります。この関数に馴染みのない学生もいるかもしれませんが、Linux C プログラミングに触れたことがある人は、この関数があることを知っています。 Linux では fork() と呼ばれ、子プロセスを作成するために使用されます。この関数は、Linux でのこの関数と同じ意味を持ちます。この機能は Linux でのみ使用でき、pcntl 拡張機能がインストールされている必要があることに注意してください。

この関数の使用方法については、公式ドキュメントを確認できます: http://php.net/manual/zh/function.pcntl-fork.php

公式ドキュメントには次のように書かれています:

pcntl_fork()関数 PID (プロセス ID) と PPID (親プロセス ID) のみが親プロセスと異なる子プロセスを作成します。システム上での fork の動作の詳細については、システムの fork(2) マニュアルを参照してください。

成功すると、親プロセス実行スレッドには生成された子プロセスのPIDが、子プロセス実行スレッドには0が返されます。失敗すると、親プロセス コンテキストで -1 が返され、子プロセスは作成されず、PHP エラーが発生します。

このようにして、子プロセスを作成することができます。子プロセスが正常に作成されると、pcntl_fork()以降のメソッドが実行されます。では、この関数の戻り値をどのように理解すればよいでしょうか?

これは、関数を呼び出してプロセスを作成するときに、関数が実行される時間があり、関数の実行の開始と終了の間に新しいプロセスが作成されます。この関数も実行されるため、関数には戻り値も必要です。関数が一度実行されると、親プロセスと子プロセスの両方が関数の戻り値を受け取ります。親プロセスは子プロセスを作成しますが、子プロセスは新しいプロセスを作成しないため、子プロセスは何も持ちません。この関数からの結果が返されるため、彼には 0 が割り当てられました。親プロセスは子プロセスを作成し、子プロセスはpidを持っているので、そのプロセスのpidを取得します。

次のことを確認するプログラムを作成できます:


$pid = pcntl_fork();
var_dump($pid);

この呼び出しは 2 つの値を出力しますが、直接出力すると、子プロセスの PID である 1 つの値しか表示されませんが、var_dump を使用すると、 0 と子プロセスの pid という 2 つの値が表示されます。値 0 が子プロセスによって返されます。

プロセスの作成方法を理解したら、プロセスの作成を開始できます。プロセスを 5 つ作成する必要があるので、5 回ループしてプロセスを作成します。次のコードを取得します:


 $i=0;
 while($i!=5){
  $pid = pcntl_fork();
  echo $pid."---------hahah".$i++.PHP_EOL;
 }

それでは、実行しましょう。ああ?プロセスが 5 つではないことがわかりました。プロセスがたくさんあることがわかりました。hahah4 の最後の出力は 32 でした。なぜ 32 なのでしょうか。計算してみましょう。 2^5=32、最終的なスレッド数が指数関数的に増加したのはなぜですか?

これを見つけるのは難しいことではありません。後続のすべてのユーザーが while ループを実行し、最終的にはプロセスが指数関数的に増加するためです。つまり、fork 時に while ループも導入されます。ただし、必要なプロセスは 5 つだけです。どうやってするの?

関数に関する以前の研究により、子プロセスが値 0 を返すことがわかり、0 が子プロセスのマークであることがわかります。子プロセスをマークすることで、プロセスの実行を終了できます。したがって、コードを次の形式に変更できます:


$i=0;
while($i!=5){
 $pid = pcntl_fork();
 echo $pid."---------hahah".$i++.PHP_EOL;
 if ($pid == 0) {
  echo "子进程".PHP_EOL;
  return;
 }
}

因为0其实是对子进程的标记,那么pid这个变量在子进程里实际上是0的,所以当发现pid的值为0的时候,我们就可以断定我们当前进程为一个子进程,不需要在让他执行while并创建子进程的子进程了,所以在执行完我们的内容之后就return或者exit退出这个执行就好了。这样就能保证我们执行创建了5个进程而不是32个了。

以上がPHPマルチプロセスにおけるpcntl_forkの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPセッションに保存されているデータをどのように変更しますか?PHPセッションに保存されているデータをどのように変更しますか?Apr 27, 2025 am 12:23 AM

tomodifydatainaphpsession、starthessession withsession_start()、$ _sessiontoset、modify、orremovevariables.1)startthessession.2)

PHPセッションに配列を保存する例を示します。PHPセッションに配列を保存する例を示します。Apr 27, 2025 am 12:20 AM

配列はPHPセッションに保存できます。 1。セッションを開始し、session_start()を使用します。 2。配列を作成し、$ _Sessionで保存します。 3. $ _Sessionを介して配列を取得します。 4.セッションデータを最適化してパフォーマンスを向上させます。

Garbage CollectionはPHPセッションでどのように機能しますか?Garbage CollectionはPHPセッションでどのように機能しますか?Apr 27, 2025 am 12:19 AM

PHPセッションガベージコレクションは、有効期限が切れたセッションデータをクリーンアップするために確率メカニズムを通じてトリガーされます。 1)構成ファイルにトリガー確率とセッションのライフサイクルを設定します。 2)Cronタスクを使用して、高負荷アプリケーションを最適化できます。 3)データの損失を避けるために、ごみ収集の頻度とパフォーマンスのバランスを取る必要があります。

どのようにしてPHPでセッションアクティビティをトレースできますか?どのようにしてPHPでセッションアクティビティをトレースできますか?Apr 27, 2025 am 12:10 AM

PHPでのユーザーセッションアクティビティの追跡は、セッション管理を通じて実装されます。 1)SESSION_START()を使用してセッションを開始します。 2)$ _Sessionアレイを介してデータを保存およびアクセスします。 3)セッションを終了するには、session_destroy()を呼び出します。セッショントラッキングは、ユーザーの動作分析、セキュリティ監視、パフォーマンスの最適化に使用されます。

データベースを使用してPHPセッションデータを保存するにはどうすればよいですか?データベースを使用してPHPセッションデータを保存するにはどうすればよいですか?Apr 27, 2025 am 12:02 AM

データベースを使用してPHPセッションデータを保存すると、パフォーマンスとスケーラビリティが向上します。 1)MySQLを構成してセッションデータを保存します:PHP.iniまたはPHPコードでセッションプロセッサを設定します。 2)カスタムセッションプロセッサを実装します:データベースと対話するために、開いて、閉じ、読み取り、書き込み、その他の機能を定義します。 3)最適化とベストプラクティス:インデックス、キャッシュ、データ圧縮、分散ストレージを使用して、パフォーマンスを向上させます。

PHPセッションの概念を簡単に説明してください。PHPセッションの概念を簡単に説明してください。Apr 26, 2025 am 12:09 AM

phpssionsStrackuserdataacrossmultiplepagerequestsusingauniqueidstoredinacookie.here'showtomanageetheemefectively:1)Startassession withsession_start()andstoredatain $ _ session.2)RegeneratesseSsessidafterloginwithsession_id(the topreventes_id)

PHPセッションに保存されているすべての値をどのようにループしますか?PHPセッションに保存されているすべての値をどのようにループしますか?Apr 26, 2025 am 12:06 AM

PHPでは、次の手順を通じてセッションデータを繰り返すことができます。1。session_start()を使用してセッションを開始します。 2。$ _Sessionアレイのすべてのキー価値ペアを介してforeachループを反復します。 3.複雑なデータ構造を処理する場合、is_array()またはis_object()関数を使用し、print_r()を使用して詳細情報を出力します。 4.トラバーサルを最適化する場合、ページングを使用して、一度に大量のデータの処理を避けることができます。これにより、実際のプロジェクトでPHPセッションデータをより効率的に管理および使用するのに役立ちます。

ユーザー認証にセッションを使用する方法を説明します。ユーザー認証にセッションを使用する方法を説明します。Apr 26, 2025 am 12:04 AM

このセッションは、サーバー側の状態管理メカニズムを介してユーザー認証を実現します。 1)セッションの作成と一意のIDの生成、2)IDはCookieを介して渡されます。3)サーバーストアとIDを介してセッションデータにアクセスします。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール