ホームページ  >  記事  >  バックエンド開発  >  PHPはマルチスレッドをサポートしていますか?

PHPはマルチスレッドをサポートしていますか?

(*-*)浩
(*-*)浩オリジナル
2019-09-12 09:12:022619ブラウズ

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

PHPはマルチスレッドをサポートしていますか?

スレッド セーフティ

マルチスレッドはプログラムを不安定にする要因です。マルチスレッドを使用する前に、まず第一に、スレッド セーフの問題を考慮する必要があります: (推奨学習: PHP プログラミングの入門から習熟まで )

スレッド セーフ: スレッド セーフとはプログラミングの用語で、特定の関数または関数ライブラリをマルチスレッド環境で呼び出すと、複数のスレッド間の共有変数が正しく処理され、プログラム関数が正しく完了することができます。

従来のマルチスレッドでは、複数のスレッドが変数を共有するため、次の問題が発生する可能性があります:

グローバル配列 $arr = array('a');;

A スレッドは配列の長さを 1 に取得します;

B スレッドは配列の長さを 1 に取得します;

A スレッドは配列要素をポップアウトします $a = array_pop($arr); $a = 'a';;

B スレッドも配列要素をポップします $b = array_pop($arr); $a = null;;

このとき、超常現象が発生しましたB スレッドでは、明らかに配列の長さが 0 より大きいか、何も表示されません。

PHP 実装

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

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

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

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

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

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