ホームページ >バックエンド開発 >PHPの問題 >phpには複数のスレッドがありますか?

phpには複数のスレッドがありますか?

王林
王林オリジナル
2019-10-10 17:51:383731ブラウズ

phpには複数のスレッドがありますか?

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

PHP 実装

PHP によって実装されたスレッド セーフティは、主に TSRM メカニズムを使用してグローバル変数と静的変数を分離し、グローバル変数と静的変数を各スレッドに割り当てます。これらはすべてコピーされ、各スレッドはメイン スレッドのバックアップを使用するため、変数の競合やスレッドの安全性の問題が回避されます。

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

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

クラスとメソッド

PHP は、スレッドを Thread クラスにカプセル化します。スレッドの作成は、スレッド オブジェクトをインスタンス化することによって実現されます。クラスのカプセル化により、変数使用方法はコンストラクターを通じてのみ渡すことができ、スレッド操作の結果もクラス変数を通じて渡す必要があります。

コード例:

次は、特定のインターフェイスをリクエストするために使用されるスレッド クラスです。次に、これに基づいて 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);
    }
}

推奨チュートリアル: PHP ビデオ チュートリアル

以上がphpには複数のスレッドがありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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