PHP は、Web テクノロジの分野で広く使用されているプログラミング言語であり、そのシンプルさ、学習の容易さ、高い開発効率、および強力なクロスプラットフォーム機能により、ますます多くの開発者や企業に好まれています。 Web アプリケーションでは高い同時実行性が共通のボトルネックであり課題となるため、実際のアプリケーションでは、PHP の同時プログラミング機能もますます注目を集めています。この記事では、PHP での同時プログラミングの例を紹介し、PHP 開発者が同時プログラミングの基本概念とテクニックを理解するのに役立ちます。
1. コンカレント プログラミングの概要
コンカレント プログラミングとは、複数のプログラムを同時に実行するプログラミング方法を指します。 PHP では、通常、同時プログラミングはマルチスレッド、マルチプロセス、またはコルーチンを使用して実装されます。マルチスレッドとマルチプロセスは従来の同時プログラミング方法であり、比較的複雑ですが、マルチコア CPU の利点を最大限に発揮できます。コルーチンは、シングルスレッド プログラムの同時実行機能を向上できる、より軽量な同時プログラミング手法です。
2. PHP マルチスレッド プログラミングの例
マルチスレッド プログラミングとは、プログラム内に複数のスレッドを作成し、各スレッドが互いに独立して異なるタスクを実行することを指します。 PHP では、PECL を使用して pthread を拡張し、マルチスレッド プログラミングを実装できます。以下は、単純なマルチスレッド プログラミングの例です。
<?php class MyThread extends Thread { public function run() { printf("Thread #%lu is running ", $this->getThreadId()); } } // 创建5个线程 for ($i = 0; $i < 5; $i++) { $thread = new MyThread(); $thread->start(); } // 等待所有线程结束 Thread::wait();
上の例では、Thread クラスから継承した MyThread クラスを定義し、run() メソッドを実装しました。このメソッドは、スレッドによって実行される特定のタスクを表します。メイン プログラムでは、5 つの MyThread インスタンスを作成し、start() メソッドを通じてスレッドを開始します。 pthread を使用する場合、スクリプトは CLI モードで実行する必要があり、Web サーバー環境では実行できないことに注意してください。
3. PHP マルチプロセス プログラミングの例
マルチプロセス プログラミングとは、プログラム内に複数のプロセスを作成し、各プロセスが互いに独立して異なるタスクを実行することを指します。 PHP では、pcntl 拡張機能を使用してマルチプロセス プログラミングを実装できます。以下は、単純なマルチプロセス プログラミングの例です。
<?php // 创建5个子进程 for ($i = 0; $i < 5; $i++) { $pid = pcntl_fork(); if ($pid == -1) { die("fork failed. "); } else if ($pid == 0) { printf("Child process #%d is running with PID %d ", $i, getmypid()); exit(); } else { // 父进程等待子进程结束 pcntl_wait($status); } }
上の例では、pcntl_fork() 関数を使用して子プロセスを作成します。子プロセスは getmypid() 関数を通じて自身のプロセス ID を取得し、対応する情報を出力します。親プロセスは、pcntl_wait() 関数によって子プロセスが終了するのを待ちます。
4. PHP コルーチン プログラミングの例
コルーチンは、シングル スレッド プログラムの同時実行機能を向上できる、より軽量な同時プログラミング手法です。 PHP では、Swoole 拡張機能を使用してコルーチン プログラミングを実装できます。以下は、簡単なコルーチン プログラミングの例です:
<?php // 创建一个协程 go(function (){ for ($i = 0; $i < 5; $i++) { printf("Coroutine #%d is running ", $i); // 让出协程执行权,切换到其他协程执行 co::yield(); } }); // 主协程 for ($i = 0; $i < 5; $i++) { printf("Main coroutine #%d is running ", $i); // 让出协程执行权,切换到其他协程执行 co::yield(); }
上の例では、 go() 関数を使用してコルーチンを作成し、コルーチン内で co::yield() 関数を使用して実行を中止します。他のコルーチンの実行に切り替えます。メインのコルーチンでは、実行権限を切り替えるために co::yield() 関数も使用されます。 Swoole 拡張機能を使用する場合は、PHP 独自のサーバーではなく Swoole のサーバー実装を使用する必要があることに注意してください (Swoole の公式ドキュメントを参照してください)。
5. 概要
この記事では、マルチスレッド プログラミング、マルチプロセス プログラミング、コルーチン プログラミングなど、PHP での同時プログラミングの例を紹介します。実際のアプリケーションでは、特定のアプリケーション シナリオと要件に基づいて同時プログラミング方式の選択を決定する必要があります。並行プログラミングは一般に複雑であり、高品質の並行アプリケーションを開発するには、開発者が強固なプログラミング基盤と並行プログラミングの経験を必要とすることに注意してください。
以上がPHP 入門: 同時プログラミングの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。