ホームページ >バックエンド開発 >PHPの問題 >PHPでマルチスレッドを実装する方法

PHPでマルチスレッドを実装する方法

(*-*)浩
(*-*)浩オリジナル
2019-10-10 15:15:003751ブラウズ

PHP はデフォルトではマルチスレッドをサポートしていません。マルチスレッドを使用するには、pthread 拡張機能をインストールする必要があります。pthread 拡張機能をインストールするには、--enable-maintainer-zts パラメータを使用して再コンパイルする必要がありますPHP。このパラメータは PHP のコンパイル時に指定されます。スレッド セーフを使用します。

PHPでマルチスレッドを実装する方法

PHP の実装

PHP によって実装されたスレッド セーフティは、主に TSRM メカニズムを使用してグローバル変数を保護します変数は分離され、グローバル変数と静的変数は各スレッドにコピーされ、各スレッドはメイン スレッドのバックアップを使用するため、変数の競合やスレッドの安全性の問題が回避されます。 (推奨される調査: PHP ビデオ チュートリアル )

PHP のマルチスレッドのカプセル化により、スレッドの安全性が確保されます。プログラマは、読み取りと書き込みの競合を避けるために、グローバル変数にさまざまなロックを追加することを考慮する必要はありません。同時に、エラーの可能性も減り、記述されたコードはより安全になります。

しかし、その結果、サブスレッドが実行を開始すると、メインスレッドはサブスレッドの実行の詳細を調整できなくなり、スレッドはグローバル変数を介してスレッド間でメッセージを送信する機能を失います。ある程度です。

同時に、PHP がスレッド セーフ オプションをオンにすると、TSRM メカニズムを使用して変数を割り当てて使用するときに追加の損失が発生するため、マルチスレッドを必要としない PHP 環境では、 PHP の ZTS (非スレッド セーフ) バージョンを使用してください。

コード例

次は、特定のインターフェイスをリクエストするために使用されるスレッド クラスです。次に、これに基づいて 2 つのマルチスレッド アプリケーションの例を作成します。

class Request extends Thread {
    public $url;
    public $response;
    public function __construct($url) {
        $this->url = $url;
    }
    public function run() {
        $this->response = file_get_contents($this->url);
    }
}

非同期リクエスト

同期リクエストを複数のスレッドと非同期呼び出しに分割して、プログラムの動作効率を向上させます。 。

rree

以上がPHPでマルチスレッドを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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